将关系分解为 BCNF 形式

Decompose relation into BCNF form

假设我们有

R(ABCDE) 和函数依赖:{AB -> C, B -> C, C -> D},将其转换为 BCNF。

我看到 R 的候选键是 ABE 所以这显然不在 BCNF 中。

为了分解,我创建了这些关系:

R1(ABC)
R2(BC)
R3(CD)
R4(ABE)

这个有用吗?

如果给定的函数依赖是对 R 的函数依赖的覆盖,应用所谓的“分析”算法会产生以下分解:

R2 (ABE)
R3 (CD)
R4 (BC)

我们首先考虑对依赖项的最小覆盖。这是:

B → C
C → D

(因为在 AB → C 中我们可以注意到 A 是外来的,因为我们已经有了 B → C)。

因此,由于 B → C 违反了 BCNF,我们将 R 分解为两个关系:

R1 (BCD), with candidate key B
R2 (ABE), with candidate key ABE

在第二个关系中没有非平凡的函数依赖,所以我们保持原样,而在 R1 中唯一的候选键是 B,所以 C → D 违反了 BCNF,我们将其分解为:

R3 (CD)
R4 (BC)

所以最终分解为R2、R3、R4。请注意,此分解保留了函数依赖性(此算法并非总是可行)。