8

我一直在阅读许多关于如何区分 3NF/BCNF 中的关系的不同资料。到目前为止,这是我的理解......

我将以这种关系为例...

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

F = {A -> B, B C - > E, E D -> A}.

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

Keys = {ACD, BCD, CDE}

现在要确保RBCNF中,我们必须确保每个函数依赖项的左侧F都是Keys. 我们立即知道情况并非如此,因为第一个 FD 是A -> B并且A不是键之一。所以它不在 BCNF 中。

现在要确保R3NF中,我们必须确保 in 中的每个功能依赖项的左侧F是其中一个,Keys 或者每个功能依赖项的右侧是其中F之一的子集Keys。如果您查看每个 FD 的右侧,它们BEA。这些都是 a 的子集Key,因此这意味着它在 3NF 中

所以这是关系存在3NF不在. BCNF这种方法正确吗?它可靠吗?我错过了什么吗?

4

2 回答 2

8

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

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

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

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

  • 所有原子,或
  • 非原子但不重叠,

保证关系在BCNF中。

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

A,B -> C C -> B

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

  • 所有函数依赖的右侧是主要属性

它违反了 BCNF,因为

  • C -> B,但左侧不是超级键
于 2017-11-04T00:37:12.287 回答
1

BCNF:

X->Y 其中 Y 可以是素数或非素数
这里,X必须超级键

3NF

X->Y 其中 Y是非素数
,那么
X必须超级键
,否则
X不必超级键

希望这可以帮助

于 2015-05-06T11:42:49.403 回答