5.第四范式(4NF) 第四范式是BCNF的推广,它适用于多值依赖的关系模式。 定义:设关系模式R属于1NF,如果对于R的每个非平凡多值依赖X→→Y(YX),X都包含码,则称R为第四范式,表示为R4NF。如果一个关系模式属于BCNF,但没有达到4NF,仍然存在操作中的异常问题。例如,在关系模式TSC中,数据的冗余度很大。解决的方法是分解TSC为 TS (T, S)和 TC(T, C),则TC和TS都是第四范式。对应的关系如表5-11和5-12。 表5-11 T_S
表5-12 T_C
显然4NF是用多值依赖的概念定义的,但4NF是BCNF的进一步规范化。可以证明,若R4NF,则必有RBCNF。 6.关系模式规范化设计实例2 有学生基本情况的关系模式STUDENT: STUDENT(SNO,SNAME,AGE,SEX,CLASS,DEP,CNO,CNAME,GRADE,SCORE) 该关系模式的函数依赖集 F={ SNO→SNAME,SNO→AGE,SNO→SEX,SNO→CLASS,SNO→DEP,CLASS→DEP, CNO→CNAME,CNO→SCORE,SNO+CNO→GRADE } 该模式的码是(SNO, CNO)该模式是属于1NF:满足的条件是元组的每个分量必须是不可分的数据项。它不是一个好的关系模式。同学自己分析为什么是一个不好的关系模式? (1)修改设计使其满足第二范式2NF关系模式STUDENT不符合2NF要求。因为其中存在部分函数依赖。 ・ 关系模式STUDENT的主码是(SNO,CNO)。 ・ 非主属性SNAME,AGE,SEX,CLASS,DEP,CNAME,GRADE,SCORE ・ 非主属性中存在对码的部分函数依赖,如,SNO→SNAME,CNO→CNAME。 消除部分函数依赖,将STUDENT关系模式进行分解,消除部分函数依赖,得到三个关系模式符合2NF要求: ・ STUDENT2(SNO,SNAME,AGE,SEX,CLASS,DEP) ・ COURSE(CNO,CNAME,SCORE) ・ SC(SNO,CNO, GRADE) 分解后,在STUDENT2模式中,仍然存在数据冗余,以及插入和删除异常。因为在STUDENT2模式中,仍然有非主属性中对码的传递函数依赖 (2)修改设计使其满足第三范式3NF关系模式STUDENT2不满足第三范式要求,因为存在传递依赖。如 SNO→CLASS→DEP,消除传递依赖,分解STUDENT2如下: ・ STUDENT3(SNO,SNAME,AGE,SEX,CLASS)CLASS(CLASS,DEP) 至此,关系模式STUDENT分解为4个3NF的关系模式: ・ STUDENT3(SNO,SNAME,AGE,SEX,CLASS)CLASS(CLASS,DEP) ・ COURSE(CNO,CNAME,SCORE) ・ SC(SNO,CNO, GRADE) (3) 修改设计使其满足BCNF范式 分析STUDENT分解的四个关系模式,它们是满足第三范式的,同时也是满足BCNF范式的。
7.规范化小结
关系模式WSC的属性之间没有任何函数依赖,(W,S,C)是码。WSC?BCNF,但关系模式有明显的毛病:数据冗余。若仓库W1增加一个保管员S3,则必须插入W1S3C1,W1S3C2,W1S3C3三个元组,若仓库W2减少一种物品C4,则必须删除W2S1C4,W2S2C4两个元组。造成上述问题的原因是关系模式WSC的属性之间存在一种称为多值依赖的数据依赖。 4NF是限制关系模式的属性之间不允许有非平凡函数依赖的多值依赖。因为根据定义,要求每一个非平凡的多值依赖X→→Y(Y X),都有X包含码,当然就有X→Y。所以,之所以允许的非平凡多值依赖实际上是函数依赖。 关系模式WSC中,W→→S,W→→C,都是非平凡的多值依赖,而W中又不含码(W,S,C),因此WSC4NF。正是由于W→→S,W→→C,这样的非平凡依赖,且非函数依赖的多值依赖的存在,造成关系模式WSC的数据冗余。若将WSC分解为两个关系模式:WS(W,S),WC(W,C),就不再有非平凡依赖且非函数依赖的多值依赖,就都是4NF的关系模式了。 |