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

时间:2014-05-15 14:39:03

标签: database database-normalization functional-dependencies 3nf bcnf

我一直在阅读许多关于如何区分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 -> BA不是其中一个键。 所以它不在BCNF。

现在要确保R位于 3NF ,我们必须确保F中每个功能相关性的左侧是Keys之一} {strong> OR F中每个函数依赖项的右侧是Keys之一的子集。如果您查看每个FD的右侧,它们是BEA。这些都是Key的子集,因此这意味着它在3NF

所以这是罕见的案例之一(根据wiki),3NF中的关系只有BCNF <{1}}。这种方法是否正确?它可靠吗?我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

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

然而,这个经验法则有助于:

  

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

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

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

保证关系在BCNF中。

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

A,B -> C C -> B

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

  • 所有功能依赖项的右侧是主要属性

它违反了BCNF,因为

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

答案 1 :(得分:2)

BCNF:

  

X-> Y,其中Y可以是 prime non-prime
  在这里,X 必须超级密钥

<强> 3NF

  

X-> Y,其中Y是非素数
  然后,
  X 必须超级密钥
   否则
  X 无需 超级密钥

希望,这有帮助