一、引入三大范式
- 必须保证数据库设计的合理性
-数据库设计关系整个系统的架构,关系到后续的开发效率和运行效率
-数据库的设计主要包含了设计表结构和表之间的联系 - 如何是合理数据库
-结构合理
-冗余较小
-尽量避免插入删除修改异常
更新异常(Update Anomalies)
数据冗余 ,更新数据时,维护数据完整性代价大
例:某系更换系主任后,系统必须修改与该系学生有关的每一个元组
插入异常(Insertion Anomalies)
该插的数据插不进去
如果一个系刚成立,尚无学生,就无法把这个系及其系主任的信息存入数据库
删除异常(Deletion Anomalies)
不该删除的数据不得不删
如果某个系的学生全部毕业了,在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了
- 如何才能保证数据库设计水平
-遵循一定的规则
-在关系型数据库中这种规则就称为范式 - 什么是范式(NF= NormalForm)
-范式是符合某一种设计要求的总结。
-要想设计一个结构合理的关系型数据库,必须满足一定的范式。
第一范式
确保每列保持原子性(不可再分割)
在上面的表中,“家庭信息”和“学校信息”列均不满足原子性的要求,故不满足第一范式,调整如下:
第二范式 - 在1NF的基础上,第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。
- 即在一个数据库表中只描述一件事情。
示例
- 学号和课程编号作为联合主键
- 课程名称只依赖于课程编号,而和学号没有关系
解决:
第三范式 - 在2NF基础上,确保数据表中的每一列数据都和主键直接相关,而不能间接相关
- 属性不依赖于其他非主属性。
示例
二、反范式
往往我们在实际项目中,考虑性能和效率问题,会违反三大范式的约束。
规范性和性能问题
关联查询的表不能超过三张
- 考虑商业的需求和目标,(成本、用户体验!)数据库的性能更加重要
- 在规范性能的问题时,需要适当考虑一下规范性