Oge*_*gen 8 database 3nf database-normalization functional-dependencies bcnf
我一直在阅读许多关于如何区分3NF/BCNF关系的不同来源.到目前为止,这是我的理解......
我将以此关系为例......
R = {A, B, C, D, E}
和
F = {A -> B, B C - > E, E D -> A}.
首先,我们必须找到关系的关键.我用这个视频来帮助我做到这一点.我得到了
Keys = {ACD, BCD, CDE}
现在要确保R在BCNF中,我们必须确保每个功能依赖的左侧F是其中之一Keys.我们立即知道情况并非如此,因为第一个FD是A -> B并且A不是其中一个键.所以它不在BCNF.
现在要确保R在3NF中,我们必须确保每个函数依赖的左侧F是Keys OR中的每个函数依赖的右侧之一F是其中一个的子集Keys.如果你看看每个FD的右侧,它们就是B,E和A.这些都是a的子集Key,因此这意味着它在3NF中.
因此,这是一种罕见的情况(根据维基),其中存在关系3NF但不存在BCNF.这种方法是否正确?它可靠吗?我错过了什么吗?
首先你需要学习超级键、候选键和主要属性。
但是,这条经验法则有帮助:
一个没有多个重叠候选键的 3NF 表保证在 BCNF 中。
换句话说,如果3NF 关系中的候选键是
保证关系在 BCNF 中。
违反 BCNF 但满足 3NF 的最简单关系具有以下函数依赖:
A,B -> C C -> B
在这种情况下,候选键是(A,B)和(A,C)。
它满足 3NF 因为
它违反了 BCNF,因为
C -> B,但左侧不是superkey。