为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。
范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。实际上,数据库范式就是我们在数据库中创建表的规则
数据库范式一共有6种范式:第一范式,第二范式,第三范式,BC范式,第四范式,第五范式
第一范式(确保每列保持原子性)
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
第二范式(确保表中的每列都和主键相关,且主键唯一相关)
第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。
也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相;如下表通过订单编号知道项目编号,负责人和客户编号;通过客户编号知道客户名称和客户联系电话
订单编号 | 项目编号 | 负责人 | 客户编号 |
客户编号 | 客户名称 | 客户联系电话 |
BC范式
所有的非主属性对每一个码都是完全函数依赖 (暗含 主关键字里面可能有多个码可以将实体区分)
所有的主属性对每一个不包含它的码也是完全函数依赖(即所选码与未选择的码之间也是完全函数依赖的)
没有任何属性完全函数依赖于非码的任何一组属性(即非主属性之间不能函数依赖)
解释:
例如关系模式 S(Sno,Sname,Sdept,Sage) 假设 Sname具有唯一性
1:非主属性 (Sdept,Sage) 不仅依赖于Sno,而且依赖于Sname,因为不仅可以通过学号知道学生的信息,还可以通过姓名知道学生的信息。
2:Sno 与Sname之间也是完全函数依赖关系
3:没有任何一个属性函数依赖于Sdept和Sage
第四范式
多值依赖的概念:表中一对多关系,幽囚只有一个主键,对应表中其他非主属性
第四范式即在满足巴斯-科德范式(BCNF)的基础上,消除非平凡且非函数依赖的多值依赖(即把同一表内的多对多关系删除)。
第五范式
满足第四范式(4NF)的基础上,消除不是由候选码所蕴含的连接依赖。如果关系模式R中的每一个连接依赖均由R的候选码所隐含,则称此关系模式符合第五范式。