【发布时间】:2019-12-04 12:17:21
【问题描述】:
我正在努力学习 BCNF。
假设
R=(A,B,C,D)
和
F={C→D,C→A,B→C}
我猜 R 不在 BCNF 中,因为 C 是 C→A,C→A 但 B→C。我应该如何改进我的答案,我应该如何分解它以使其成为 BCNF?
【问题讨论】:
标签: schema database-normalization relation bcnf
我正在努力学习 BCNF。
假设
R=(A,B,C,D)
和
F={C→D,C→A,B→C}
我猜 R 不在 BCNF 中,因为 C 是 C→A,C→A 但 B→C。我应该如何改进我的答案,我应该如何分解它以使其成为 BCNF?
【问题讨论】:
标签: schema database-normalization relation bcnf
短语“R 不在 BCNF 中”是无效的,因为只有功能依赖 (FD) 可能违反 BCNF。
在你的情况下要分解,首先找到候选键(FD闭包后可以获得所有属性的最小键)
Key = B,因为 B+ = {A,B,C,D}
BCNF 法则:left side of all FDs need to be superkeys
让我们从第一个 FD 开始,C -> D
C -> D violates BCNF 因为C is not a superkey of B
分解公式:Assume X -> Y, R1 = X+, R2 = R - (X+ - X)
在我们的例子中,使用基本数学,R1 = (C,D), R2 = (A,B,C)
现在 C -> D 满足 BCNF
第二个 FD:C -> A violates BCNF 因为C is not a superkey of B
使用上述相同的公式分解 R2,因为 R2 包含这些属性:
R21 = (A,C), R22 = (B,C)
现在 C -> A 满足 BCNF
让我们检查最后一个 FD,B -> C satisfies BCNF 因为B is superkey of B
所以分解后,R = (A,B,C,D) 分解为
R1 = (C,D)
R2 = (A, C)
R3 = (B, C)
【讨论】: