应用数据库范式可以带来许多好处:
- 减少数据冗余(主要好处)
- 消除异常(插入异常,更新异常,删除异常)
- 数据组织的更加和谐
数据库范式不是越高越好,范式越高,意味着表越多,多表联合查询的几率越大,sql的效率就变低。表多带来问题:1.查询时需要连接多个表,增加了sql查询的复杂度 2.查询时需要连接多个表降低数据库查询性能
第一范式(1NF)
要求数据库中的每个属性都不可再分,即属性的原子性每一列保持原子特性,每一列都是基本数据项,不能够再进行分割,数据库中每个属性都不可再分,不符合第一范式就不能称之为关系型数据库。
比如说表中设置地址字段,但是地址可以再 细分为省,市,区等不可再分割(即原子特性)的字段
第二范式(2NF)
每一列都与主键相关,必须是完全依赖
要求数据库中的每个非主属性都必须完全依赖于主键,非主属性完全依赖于主键关键字(联合主键 )如果不是完全依赖主键,应该拆分成新的实体,设计成一对多的实体关系。
主要针对联合主键,比如说现在有一个选课关系表,SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),我们将其中(学号和课程名称)设为联合主键,但学分只和课程名称有关,和学号无关,相当于只依赖联合主键的其中一个字段,不符合 第二范式。
第三范式(3NF)
(确保每列都和主键列直接相关,而不是间接相关)
要求一个数据库中的每一个非主属性都不依赖于其他非主属性,即消除非主属性对其他非主属性的传递依赖。
学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),学号是主 键,但是学院电话只依赖于所在学院,并不依赖于主键学号
巴斯-科德范式(BCNF)
任何属性都不依赖于其他属性,完全依赖于候选键在这里也不允许了。
第四范式(4NF)
消除多值依赖,避免数据重复和数据冗余的问题 。