给定关系 R = {v,w,x,y,z} 和函数依赖集 {v -> w, y -> z, yz -> v, wx-> z} 找到 BCNF 组合并检查依赖项是否保留成立。
我试图找到一个最小的封面:
v -> w
y -> z
y -> v
wx -> z
我只找到一个候选键:
XY
我开始检查范式:
第一范式:检查
第二范式:
这些依赖关系违反了 2NF:
y -> z
y -> v
wx -> z
我从未见过像第三个 FD 这样的例子,其中左侧是素数和非素数属性的组合。
遇到这种情况我们该如何解决?
我们是否为第三个 FD 创建一个新的关系,使 w 和 x 主键?
是否认为FD(功能依赖)“违反了2NF”取决于人们对2NF的定义。 2NF 的常见定义是,如果非素数属性在功能上部分依赖于 CK(候选键),则 FD 不成立。那么,违规 FD 是否是非主属性在功能上部分依赖于 CK 的 FD?或者非素数属性在功能上依赖于 CK 的真子集,而前面的 FD 是部分的?或者两者都有?和/或其他?或者什么?事实上,并不是单个 FD 违反了 NF,而是所有 FD 的集合都成立。如果您想讨论个别 FD 违规,那么您需要给出 2NF 的定义,然后根据定义如何谈论此类 FD 给出并证明违反 FD 的定义。
下面使用上面的 2NF 定义并讨论该定义明确不允许的“坏”FD,其中非素数属性在功能上部分依赖于 CK。
这三个FD还不错。当 FD 的右侧在功能上由其左侧的适当/较小子集确定时,FD 是“部分”的。这三个 FD 都不是对 CK(候选密钥)的部分依赖。它们都不是部分的,因为没有一个右侧是由左侧的子集(行列式)确定的。他们甚至都没有在 CK 上,因为他们的左手边都没有 CK。 您可能会认为前两个“违反了 2NF”,根据 2NF 定义,不存在左侧为 CK 的真子集且右侧为非素数属性的 FD。该定义明确不允许这些 FD。所以我们没有 2NF。
然而,FD xy->z 和 xy->v 是部分的,因为 xy 的真/较小子集决定了 z 和 v。它们是不好的:xy 是 CK,Z 和 v 是非素数属性,因此两者都有非素数属性部分依赖于 CK。所以我们没有 2NF。
wx->z 还不错。而且根据 2NF 定义,不存在左侧为 CK 的真子集且右侧为非素数属性的 FD,这并不“违反 2NF”。
“左边是否是素数和非素数属性的组合”并不重要。重要的是你的定义中提到了什么。 (碰巧你永远不会看到这样的不良或“违反”FD 的“例子”。因为这两者都需要仅具有 CK 属性的左侧。)
阅读部分 FD 和 2NF 的一些学术定义。 (许多教科书/演示文稿/课程都是免费的在线课程。)准确记忆并应用定义、定理和算法。你似乎不明白很多事情: