定义1:设K为R<U,F>中的属性或属性组合,若U对K完全函数依赖,则K为R的候选码。
定义2:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码,也称外码。
注意:U是完全函数依赖于K,而不是部分函数依赖于K
一般地,如果U函数依赖于K,即K->U,则K称为超码。候选码是一类特殊的超码,即候选码的超集一定是超码,候选码的任何真子集一定不是超码。
若候选码多于一个,则选定其中的一个为主码。包含在任何一个候选码中的属性称为主属性;不包含在任何候选码中的属性称为非主属性或非码属性。最简单的情况,单个属性是码;最极端的情况,整个属性组是码,称为全码。
定义3:关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式,满足最低要求的叫第一范式,简称1NF。
定义4:若R∈1NF,且每一个非主属性完全函数依赖于任何一个候选码,则称R∈2NF。
所有单关键字的数据库表都符合2NF,因为不可能存在组合关键字,也就不可能存在非主属性部分依赖于主关键字。
例如:S-L-C(Sno,Sdept,Sloc,Cno,Grade),其中Sloc为学生的住处,并且每个系的学生住在同一个地方。
S-L-C的码为(Sno,Cno),则函数依赖有:
(Sno,Cno)->Grade (完全依赖)
Sno->Sdept ,(Sno,Cno)->Sdept(部分依赖)
Sno->Sloc ,(Sno,Cno)->Sloc(部分依赖)
Sdept->Sloc
由于非主属性Sdept,Sloc并不完全函数依赖于码,因此不符合2NF
一个关系模式R不属于2NF,就会产生以下几个问题:
1.插入异常 2.删除异常 3.修改复杂
定义3:设关系模式R<U,F>∈1NF,若R中不存在这样的码X,属性组Y及非主属性Z(Z不属于Y)使得X->Y,Y->Z成立,X不依赖于Y,则称R<U,F>∈3NF。
由定义可知,若R∈3NF,则每个非主属性既不传递依赖于码,也不部分依赖于码。也就是说,可以证明如果R∈3NF,则必属于2NF
例如:SC(Sno,Cno,Grade) S-L(Sno,Sdept,Sloc),关系模式SC没有传递依赖,而S-L存在非主属性对码的传递依赖。
在S-L中,由Sno->Sdept,Sdept->Sloc,可得Sno->Sloc(传递),因此S-L不属于3NF,SC∈3NF
一个关系模式R若不是3NF,就会产生2NF类似问题。
定义4:关系模式R<U,F>∈1NF,若X->Y且Y不属于X时,X必含有码,则R<U,F>∈BCNF。
也就是说,关系模式R<U,F>中,若每一个决定因素都包含码,则R<U,F>∈BCNF。
一个满足BCNF的关系模式有:
(1)所有非主属性对每一个码都是完全函数依赖。
(2)所有主属性对每一个不包含它的码也是完全函数依赖。
(3)没有任何属性完全函数依赖于非码的任何一组属性。
由于R∈BCNF,按定义排除了任何属性对码的传递依赖与部分依赖,所以R∈3NF。但是若R∈3NF,R未必属于BCNF。
3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。一个模式中的关系模式如果都能属于BCNF,那么在函数依赖范畴内它已经实现了彻底的分离,已消除插入和删除异常。