假设模式 R(A,B,C,D,E) 具有功能依赖关系 AB -> ABCDE(AB 是超键)和 C -> B(B 是键 AB 的一部分,因此对于所有依赖关系,该模式都符合 3NF)。
B 是键 (AB) 的一部分,这有什么帮助?
仍有可能出现 AB -> ... C ... -> B,例如 (1,2,3,4,5) (2,2,3,4,5),其中 C 是部门编号,B 是该公寓的工作人员人数。即使 C 是主要属性,它也不会消除冗余。如果 C 不是主要属性,也会发生同样的情况。
那么这个定义是如何消除冗余的呢?
定义部分“X -> Y 属于 3NF,如果...或者如果 Y 是主要属性”(其他先决条件明确)如何完全消除冗余?
例如有 (1,2,3,4,5) 和 (1,x,3,4,6):为了满足 C -> B,x 应该是 2,但是如果 x 是 2,则 AB -> ABCDE 就不会满足,从而产生矛盾。