我一直在阅读许多关于如何区分3NF / BCNF关系的不同来源。到目前为止,这是我的理解......
我将以此关系为例......
R = {A, B, C, D, E}
和
F = {A -> B, B C - > E, E D -> A}
。
首先,我们必须找到关系的关键。 I used this video to help me do that.我得到了
Keys = {ACD, BCD, CDE}
现在要确保R
位于 BCNF ,我们必须确保F
中每个功能相关性的左侧是Keys
之一}。我们立即知道情况并非如此,因为第一个FD是A -> B
而A
不是其中一个键。 所以它不在BCNF。
现在要确保R
位于 3NF ,我们必须确保F
中每个功能相关性的左侧是Keys
之一} {strong> OR F
中每个函数依赖项的右侧是Keys
之一的子集。如果您查看每个FD的右侧,它们是B
,E
和A
。这些都是Key
的子集,因此这意味着它在3NF 。
所以这是罕见的案例之一(根据wiki),3NF
中的关系只有BCNF
但 <{1}}。这种方法是否正确?它可靠吗?我错过了什么吗?
答案 0 :(得分:3)
首先,您需要学习超级键,候选键和主要属性。
然而,这个经验法则有助于:
没有多个重叠候选键的3NF表是 保证在BCNF。
换句话说,如果3NF关系中的候选键是
保证关系在BCNF中。
违反BCNF但满足3NF的最简单关系具有以下功能依赖性:
A,B -> C C -> B
在这种情况下,候选键是(A,B)
和(A,C)
。
它符合3NF,因为
它违反了BCNF,因为
C -> B
,但左侧不是超级键。答案 1 :(得分:2)
BCNF:
X-> Y,其中Y可以是 prime 或 non-prime
在这里,X 必须是超级密钥
<强> 3NF 强>:
X-> Y,其中Y是非素数
然后,
X 必须是超级密钥
否则
X 无需 超级密钥
希望,这有帮助