在3NF中找到关系,但在BCNF中找不到

我一直在阅读很多关于如何区分3NF / BCNF关系的资料。 而我迄今为止这是我的理解......

我将用这个关系作为例子...

R = {A, B, C, D, E}

F = {A -> B, BC - > E, ED -> A}

首先,我们必须找到关系的关键。 我用这个视频来帮助我做到这一点。 我得到了

Keys = {ACD, BCD, CDE}

现在为了确保RBCNF中 ,我们必须确保F中每个函数依赖关系的左手边是其中一个Keys 。 我们立即知道情况并非如此,因为第一个FD是A -> BA不是关键之一。 所以它不在BCNF。

现在,以确保R3NF,我们必须确保在每一个函数依赖的左边F是一个Keys 每一个函数依赖的右边F是一个子集Keys 。 如果你看看每个FD的右侧,他们是BEA 这些都是Key的子集,所以这意味着它是在3NF中

所以这是罕见的情况之一(根据wiki),其中关系在3NF不在 BCNF 。 这种方法是否正确? 它可靠吗? 我错过了什么?


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

但是,这个经验法则有助于:

没有多个重叠候选键的3NF表格保证在BCNF中。

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

  • 所有的原子,或
  • 非原子但不重叠,
  • 它保证了关系在BCNF。

    违反BCNF但遇到3NF的最简单的关系具有以下功能依赖性:

    A,B -> CC -> B

    在这种情况下,候选键是(A,B)(A,C)
    它符合3NF,因为

  • 所有函数依赖关系的右侧是主要属性
  • 它违反了BCNF,因为

  • C -> B ,但左侧不是超级键

  • BCNF:

    X> Y其中Y可以是素数 或非素数
    在这里,X必须是超级密钥

    3NF

    X> Y,其中Y 是非素数
    然后,
    X必须是超级按键
    其他
    X不必是超级键

    希望这可以帮助

    链接地址: http://www.djcxy.com/p/20437.html

    上一篇: Finding a relation in 3NF but not in BCNF

    下一篇: What's bloating my png?