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

Oge*_*gen 8 database 3nf database-normalization functional-dependencies bcnf

我一直在阅读许多关于如何区分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中,我们必须确保每个函数依赖的左侧FKeys OR中的每个函数依赖的右侧之一F是其中一个的子集Keys.如果你看看每个FD的右侧,它们就是B,EA.这些都是a的子集Key,因此这意味着它在3NF中.

因此,这是一种罕见的情况(根据维基),其中存在关系3NF存在BCNF.这种方法是否正确?它可靠吗?我错过了什么吗?

AHA*_*AHA 7

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

但是,这条经验法则有帮助:

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

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

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

保证关系在 BCNF 中。

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

A,B -> C C -> B

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

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

它违反了 BCNF,因为

  • C -> B,但左侧不是superkey