(1)2NF(没有部分依赖)
**若R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R属于2NF。
(2)3NF(非主属性不可以传递依赖于码)
**设关系模式R<U,F>属于1NF,若R中不存在这样的码X,属性组Y及非主属性Z使得X->Y,Y->Z成立,则称R<U,F>属于3NF。
**每一个非主属性既不传递依赖于码,也不部分依赖于码。
(3)BCNF(扩展的第三范式)
**没有非主属性
**关系模式R<U,F>属于1NF,若X->Y且Y不属于X,时X必含有码,则R<U,F>属于BCNF
**每一个决定因素都包含码。
**一个满足BCNF的关系模式有:
①所有非主属性对每一个码都是完全函数依赖;
②所有主属性对每一个不包括它的码也是完全函数依赖;
③没有任何属性完全函数依赖于非码的任何一组属性;
④例子:
(S,J)->T, (S,T)->J, T->J
(S,J),(S,T)都是候选码
STJ是3NF,因为没有任何非主属性对码传递依赖或部分依赖,但STJ不是BCNF,因为T是决定因素,但是T不包括码。
(4)多值依赖
** 多值依赖(MVD):关系模式R(U),U是属性集,在U(X,Y,Z)中,当一对(X,Z)值可以对应一组Y值时,Y值仅仅取决于X值,而与Z值无关。即表示为,X->->Y。
**平凡的多值依赖:若X-->Y,而Z为空,则称X-->Y为平凡的多值依赖。
**多值依赖具有以下性质:
①对称性:若X->->Y,则X->->Z,其中Z=U-X-Y;
②传递性:若X->->Y,Y->->Z,则X->->Z-Y;
③函数依赖可以看作是多值依赖的特殊情况:即若X->Y,则X->->Y;
④若X->->Y,X->->Z,则X->->Z,则X->->YZ;
⑤若X->->Y,X->->Z,则X->->Y交Z;
⑥若X->->Y,X->->Z,则X->->Y-Z,X->->Z-Y;
**多值依赖和函数依赖的区别:
①多值依赖的有效性与属性集的范围有关。
②若函数依赖X->Y在R(U)上成立,则对于任何Y‘属于Y均有X->Y’成立。而多值依赖X->->Y,若在R(U)上成立,却不能断言对于任何Y‘属于Y有X->->Y‘成立。
(5)4NF
**4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。
**4NF所允许的非平凡的多值依赖实际上是函数依赖。
**如果只考虑函数依赖,则属于BCNF的关系模式规范化已经是最高的了;如果考虑多值依赖,则属于4NF的关系模式规范化程度是最高的。
(6)规范化小结:
2NF:消除非主属性对码的部分函数依赖
3NF:消除非主属性对码的传递函数依赖
BCNF:消除主属性对码的部分和传递函数依赖
4NF:消除平凡且非函数依赖的多值依赖