什么是数据库范式?

关系数据库的设计规范。不同的规范要求被称为不同的范式,越高的范式数据库冗余越小。

作用?

减少数据库中数据冗余的过程;

数据库范式

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 模式。