我一直在阅读许多关于如何区分 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中,我们必须确保 in 中的每个功能依赖项的左侧F
是其中一个,Keys
或者每个功能依赖项的右侧是其中F
之一的子集Keys
。如果您查看每个 FD 的右侧,它们B
是E
和A
。这些都是 a 的子集Key
,因此这意味着它在 3NF 中。
所以这是关系存在3NF
但不在. BCNF
这种方法正确吗?它可靠吗?我错过了什么吗?