R(A,B,C,D) 是一个关系。下列哪项没有无损连接、保留依赖的 BCNF 分解?
(A) A->B, B->CD
(B) A->B、B->C、C->D
(C) AB->C, C->AD
(D) A -> BCD答案: (C)
说明:背景:
-
无损连接分解:
如果以下函数依赖中的至少一个在 F+ 中,则将 R 分解为 R1 和 R2 是一种无损连接分解(函数依赖的闭包)R1 ∩ R2 → R1 OR R1 ∩ R2 → R2
- 依赖保留:
如果分解后函数依赖的闭包与分解前 FD 的闭包相同,则将 R 分解为 R1 和 R2 是一个依赖保留分解。
一个简单的方法是检查我们是否可以从分解后存在的 FD 中导出所有原始 FD。
问题 :
我们知道,对于无损分解,公共属性应该是关系之一中的候选键。
A) A->B, B->CD
R1(AB) 和 R2(BCD)
B 是第二个的关键,因此分解是无损的。
B) A->B, B->C, C->D
R1(AB)、R2(BC)、R3(CD)
B 是第二个的键,C 是第三个的键,因此是无损的。
C) AB->C, C->AD
R1(ABC), R2(CD)
C 是第二个键,但 C->A 违反了 ABC 中的 BCNF 条件,因为 C 不是键。我们不能进一步分解 ABC,因为 AB->C依赖会丢失。
D) A -> BCD
已经在 BCNF。
因此,选项 C AB->C, C->AD 是答案。
这个问题的测验