在3NF中找到关系,但在BCNF中找不到
我一直在阅读很多关于如何区分3NF / BCNF关系的资料。 而我迄今为止这是我的理解......
我将用这个关系作为例子...
R = {A, B, C, D, E}
和
F = {A -> B, BC - > E, ED -> A}
。
首先,我们必须找到关系的关键。 我用这个视频来帮助我做到这一点。 我得到了
Keys = {ACD, BCD, CDE}
现在为了确保R
在BCNF中 ,我们必须确保F
中每个函数依赖关系的左手边是其中一个Keys
。 我们立即知道情况并非如此,因为第一个FD是A -> B
而A
不是关键之一。 所以它不在BCNF。
现在,以确保R
是3NF,我们必须确保在每一个函数依赖的左边F
是一个Keys
或每一个函数依赖的右边F
是一个子集Keys
。 如果你看看每个FD的右侧,他们是B
, E
和A
这些都是Key
的子集,所以这意味着它是在3NF中 。
所以这是罕见的情况之一(根据wiki),其中关系在3NF
但不在 BCNF
。 这种方法是否正确? 它可靠吗? 我错过了什么?
首先,您需要学习超级键,候选键和主要属性。
但是,这个经验法则有助于:
没有多个重叠候选键的3NF表格保证在BCNF中。
换句话说,如果3NF关系中的候选键是
它保证了关系在BCNF。
违反BCNF但遇到3NF的最简单的关系具有以下功能依赖性:
A,B -> CC -> B
在这种情况下,候选键是(A,B)
和(A,C)
。
它符合3NF,因为
它违反了BCNF,因为
C -> B
,但左侧不是超级键 。 BCNF:
X> Y其中Y可以是素数 或非素数
在这里,X必须是超级密钥
3NF :
X> Y,其中Y 是非素数
然后,
X必须是超级按键
其他
X不必是超级键
希望这可以帮助
链接地址: http://www.djcxy.com/p/20437.html