什么是数据库范式?
关系数据库的设计规范。不同的规范要求被称为不同的范式,越高的范式数据库冗余越小。
作用?
减少数据库中数据冗余的过程;
数据库范式
1、第一范式(1NF):
在关系模式R中,当且仅当所有属性只包含原子值,即每个分量都是不可再分的数据项,则称R满足1NF。
例如表所示的教师职称情况关系就不满足1NF。原因在于,该关系模式中的“高级职称人数”不是一个原子属性,若将其拆分为“教授”和“副教授”两个属性,则就满足1NF。
系名称 | 高级职称人数 | |
教授 | 副教授 | |
计算机系 | 1 | 2 |
电子系 | 3 | 4 |
2、第二范式(2NF):
满足1NF的关系模式会有许多重复值,修改数据可能引起疏漏。为了消除这种数据冗余和避免更新数据的遗漏,需要使用更加规范的2NF。当且仅当关系模式满足1NF,且每个非键属性(既不属于任何候选键的属性,也称为非主属性)完全依赖于候选键时,则称R满足2NF。
例如,有选课关系模式SC(Sno,Cno,Grade,Credit),其中(Sno,Cno)->Grade,Cno->Credit。因此,SC的候选键为(Sno,Cno)。这样Cno->Credit就构成了Credit对候选键(Sno,Cno)的部分函数依赖。因此,SC不满足2NF。若要将SC转化为2NF,可以将它拆分为SC1(Sno,Cno,Grade)和SC2(Cno,Grade)。
3、第三范式(3NF):
当且仅当关系模式满足1NF,且R中没有非键属性传递依赖于候选键时,则称R满足3NF。
例如学生关系S(Sno,Sname,Dno,Dname,Location)各属性分别代表学号,姓名,所在系,系名称和系地址,其数据如表5-5所示。
Sno | Sname | Dno | Dname | Location |
S01 | 张三 | D01 | 计算机系 | 1号楼 |
S02 | 李四 | D01 | 计算机系 | 1号楼 |
S03 | 王五 | D01 | 计算机系 | 1号楼 |
S04 | 赵六 | D02 | 信息系 | 2号楼 |
…… |
从各属性之间的联系可以判断出S的函数依赖有Sno->(Sname,Dno,Dname,Location),Dno->(Dname,Location)。显然Sno为候选键。在函数依赖中有Sno->Dno->Dname与Sno->Dno->Location,这便是传递函数依赖。由于Dname与Location为非键属性,同时传递依赖于候选键,因此关系模式S不满足3NF。若要使S满足3NF,需要将其拆分为S1(Sno,Sname,Dno)和S2(Dno,Dname,Location)。
4、BC 范式(BCNF):
若关系模式R 是1NF,且每个属性都不传递依赖于R 的候选键,则称R 是BCNF 模式。