我在理解如何确定关系是否在BCNF,3NF以及通常识别关系的候选键时遇到问题。
考虑关系R = (A, B, C, D)
与功能依赖关系:
AB -> C
C -> D
D -> A
问题包括:
一个。列出R
的候选键 湾确定R是否在BCNF或3NF中。
解决方案解决了
一个。 R的3个候选键是AB,BC和BD 湾R是3NF,但不是BCNF。
我已经阅读What is the difference between 3NF and BCNF?并且在引用数据库模式中的非arbituary单词时可以理解3NF和BCNF之间的区别。在尝试确定与问题中给出的关系减少的关系时,我最终迷失了。
有人可以解释上面如何确定候选键,以及为什么R在3NF而不是BCNF?
答案 0 :(得分:2)
你在同一时间问几个问题。
如何计算关系的键。通常,最简单的方法是计算每个属性组合的闭包,并确定哪些是超密钥。从这组超级密钥中,找到最小的密钥:这些是候选密钥。
如何确定关系是否为BCNF。
对此你不需要钥匙。你需要做的就是测试每个非平凡的函数依赖,左边是关系的超级密钥。
你如何为FD确定这一点?只需计算FD左侧的闭合。如果结果是关系的所有属性,那么它就是超级密钥。
FD必须采用规范形式:右侧有一个属性。
对于每个非平凡的FD,左手是超级钥匙(如BCFN)或右手侧是钥匙(任何钥匙)的一部分。
这是非常好的视频,解释了这些差异: