我一直在阅读许多不同的资料来了解如何区分 3NF/BCNF 中的关系。到目前为止,这是我的理解......
我将使用这种关系作为例子......
R = {A, B, C, D, E}
and
F = {A -> B, B C - > E, E D -> A}
.
首先我们必须找到关系的关键。我用这个视频来帮助我做到这一点。 http://www.youtube.com/watch?v=s1DNVWKeQ_w我得到了
Keys = {ACD, BCD, CDE}
现在要确定R
is in BCNF,我们必须确保每个函数依赖的左侧F
其中一个Keys
。我们立即知道情况并非如此,因为第一个 FD 是A -> B
and A
不是钥匙之一。所以它不在BCNF中。
现在要确定R
is in 3NF,我们必须确保每个函数依赖的左侧F
其中一个Keys
OR每个函数依赖的右侧F
是其中之一的子集Keys
。如果你看一下每个 FD 的右侧,它们是B
, E
and A
。这些都是一个子集Key
,所以这意味着它在 3NF 中.
所以这是其中之一rare关系所在的情况(根据维基)3NF
but not in BCNF
。这个方法正确吗?可靠吗?我错过了什么吗?
首先,您需要学习超级键、候选键和主要属性。
然而,这条经验法则有帮助:
没有多个重叠候选键的 3NF 表是
保证在 BCNF 中。
换句话说,如果候选键在 3NF 关系中是
保证关系符合BCNF。
违反BCNF但满足3NF的最简单关系具有以下函数依赖关系:
A,B -> C C -> B
在这种情况下,候选键是(A,B)
and (A,C)
.
它满足 3NF 因为
它违反了BCNF,因为
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)