将关系分解为 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。请注意,此分解保留了函数依赖性(此算法并非总是可行)。
假设我们有
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。请注意,此分解保留了函数依赖性(此算法并非总是可行)。