我阅读了大量示例,指出只要不存在重叠的候选键,3NF就是BCNF ...
给出:
R(a,b,c,d,e,f)
a,b,c -> d
a,b,c -> e
a,b,c -> f
因此,a,b,c是唯一的候选键。 到目前为止是BCNF。
现在,我添加了FD f-> c,它不是素数->素数 但是 ,我仍然没有重叠的候选键。
我回到3NF还是在BCNF中?
答案 0 :(得分:4)
如果添加新的FD,则必须重新确定CK,这些属性是质数和非质数,是否在3NF中,是否有重叠的CK和在BCNF中。
我们有一个新的给定封面,其中又包含FD。 (如果我们希望现在保留所有FD,那么我们必须重新应用阿姆斯特朗公理。如果我们希望为新的覆盖范围提供最小的覆盖范围,则必须对其进行计算。)应用CK的定义和/或算法来查找CK,我们就有CK {a,b,c}和{a,b,f}。非素数属性是d&e。应用3NF的定义,例如,每个非素数属性在功能上都依赖于每个CK,我们有3NF。 CK重叠,因此我们可能没有BCNF。应用BCNF的定义,例如,非平凡FD的每个行列式都是一个超键,我们注意到f-> c不在超键之外,因此我们没有BCNF。