【发布时间】:2014-05-15 14:39:02
【问题描述】:
我已经阅读了许多关于如何区分 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 之一OR F 中每个函数依赖项的右侧是Keys 之一的子集。如果您查看每个 FD 的右侧,它们是 B、E 和 A。这些都是Key 的子集,所以这意味着它在 3NF 中。
所以这是 罕见 案例之一(根据 wiki),其中一个关系在 3NF 中,但 不在 在 BCNF 中。这种方法正确吗?它可靠吗?我错过了什么吗?
【问题讨论】:
-
是的,你做对了。
-
你可能想看看这个:class2go.stanford.edu/db/Winter2013
标签: database database-normalization functional-dependencies 3nf bcnf