BCNF,3NF和候选键

时间:2016-10-31 00:30:02

标签: database 3nf bcnf candidate-key

我在理解如何确定关系是否在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?

1 个答案:

答案 0 :(得分:2)

你在同一时间问几个问题。

  1. 如何计算关系的键。通常,最简单的方法是计算每个属性组合的闭包,并确定哪些是超密钥。从这组超级密钥中,找到最小的密钥:这些是候选密钥。

  2. 如何确定关系是否为BCNF。

  3. 对此你不需要钥匙。你需要做的就是测试每个非平凡的函数依赖,左边是关系的超级密钥。

    你如何为FD确定这一点?只需计算FD左侧的闭合。如果结果是关系的所有属性,那么它就是超级密钥。

    1. 如何确定关系是否为3NF?
    2. FD必须采用规范形式:右侧有一个属性。

      对于每个非平凡的FD,左手是超级钥匙(如BCFN)或右手侧是钥匙(任何钥匙)的一部分。

      这是非常好的视频,解释了这些差异:

      BCNF vs 3NF