【发布时间】:2013-03-08 13:12:59
【问题描述】:
我有关系
R = { A, B, C, D, E, F, G, H, I }
以及函数依赖
F ={
ABC -> DE
E -> C
AB -> F
C -> G
F -> H
H -> IJ
F -> B
}
我可以进行简单的 BCNF 分解,但我不能分解它。我有 ABC 作为唯一的候选键。然后我把它分成两个关系来摆脱第一个破坏 BCNF 的 FD,E -> C,给我关系
{ A, B, D, E, F, G, H, I, J } and { E, C }
但是现在我马上就丢失了第一个关系的候选键。那么这是否意味着我现在必须为第一个关系找到一个新的候选键,然后继续分解它的过程,直到我们没有违反 BCNF 的关系?有人可以告诉我如何进行这种分解吗?
编辑:
好的,这就是我接下来要做的事情:
我目前有{ A, B, D, E, F, G, H, I, J } 和{ E, C }
我为更大的关系找到了一把新钥匙。这个新密钥是ABDEG?
然后我通过在违反 BCNF 的地方拆分关系来继续分解。以下是我采取的步骤:
{ A, B, D, E, F, G, H, I, J } // { E, C }
{ A, B, D, E, G, H, I, J } // { AB, F } // { E, C }
{ A, B, D, E, G, H, J } // { H, I } // { AB, F } // { E, C }
{ A, B, D, E, G, H } // { H, J } // { H, I } // { AB, F } // { E, C }
所以最后一行是我的最终结果。那似乎是在BCNF?我的答案是否正确,我的分解是否正确?
【问题讨论】:
-
如果 ABC 是候选键,那么从 E->C 可以得出 ABE 也必须是候选键。
-
干杯,没有发现。考虑到这一点,我再次检查了我的结果,但我仍然得到了相同的答案。
-
有四个候选键:ABC、ABE、ACF 和 AEF。
标签: database-design relational-database normalization