MySql三大范式

1、引入三大范式

  • 必须保证数据库设计的合理性
       -数据库设计关系整个系统的架构,关系到后续的开发效率和运行效率
       -数据库的设计主要包含了设计表结构和表之间的联系
  • 如何是合理数据库
       -结构合理
       -冗余较小
       -尽可能避免插入删除修改异常
更新异常(Update Anomalies)
			数据冗余 ,更新数据时,维护数据完整性代价大
			例:某系更换系主任后,系统必须修改与该系学生有关的每个元组
		插入异常(Insertion Anomalies)
			该插的数据插不进去
			若是一个系刚成立,尚无学生,就没法把这个系及其系主任的信息存入数据库
		删除异常(Deletion Anomalies)
			不应删除的数据不得不删
			若是某个系的学生所有毕业了,在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了
  • 如何才能保证数据库设计水平
       -遵循必定的规则
       -在关系型数据库中这种规则就称为范式
  • 什么是范式(NF= NormalForm)
       -范式是符合某一种设计要求的总结。
       -要想设计一个结构合理的关系型数据库,必须知足必定的范式。
    在这里插入图片描述
    第一范式
    确保每列保持原子性(不可再分割)
    在这里插入图片描述
    在上面的表中,“家庭信息”和“学校信息”列均不知足原子性的要求,故不知足第一范式,调整以下:在这里插入图片描述
    第二范式
  • 在1NF的基础上,第二范式须要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。
  • 即在一个数据库表中只描述一件事情。

示例java

  • 学号和课程编号做为联合主键
  • 课程名称只依赖于课程编号,而和学号没有关系
    在这里插入图片描述
    解决:
    在这里插入图片描述在这里插入图片描述
    第三范式
  • 在2NF基础上,确保数据表中的每一列数据都和主键直接相关,而不能间接相关
  • 属性不依赖于其余非主属性。

示例
在这里插入图片描述在这里插入图片描述web

2、反范式

每每咱们在实际项目中,考虑性能和效率问题,会违反三大范式的约束。
规范性和性能问题
 关联查询的表不能超过三张数据库

   - 考虑商业的需求和目标,(成本、用户体验!)数据库的性能更加剧要
   - 在规范性能的问题时,须要适当考虑一下规范性架构