我一直在阅读有关如何区分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 之一,F中每个功能依赖项的右侧是以下之一的子集Keys。如果您查看每个FD的右侧,它们分别是BEA。这些都是Key的子集,因此这意味着在3NF 中。

因此,这是罕见的情况之一(根据Wiki),其中关系在3NF中,但不是BCNF中的。这种方法正确吗?它可靠吗?我有什么想念的吗?

最佳答案

首先,您需要学习 super 键,候选键和主要属性。

但是,此经验法则有助于:



换句话说,如果3NF关系中的候选键

  • 全部为原子,或
  • 非原子但不重叠,

  • 确保该关系在BCNF中。

    违反BCNF但满足3NF的最简单关系具有以下功能依赖性:
    A,B -> C C -> B
    在这种情况下,候选键为(A,B)(A,C)
    符合3NF,因为
  • 在所有功能依赖项的右侧是主要属性

  • 它违反了BCNF,因为
  • C -> B,但左侧不是 super 键
  • 10-06 05:00