2

我在理解如何确定关系是否在 BCNF、3NF 中以及一般识别关系的候选键时遇到问题。

考虑R = (A, B, C, D)与功能依赖的关系:

AB -> C
C -> D
D -> A

问题包括:

一个。列出 R
b 的候选键。确定 R 是在 BCNF 还是 3NF 中。

解决方案解决

一个。R 的 3 个候选键是 AB、BC 和 BD。
湾。R 属于 3NF,但不属于 BCNF。

我已通读3NF 和 BCNF 有什么区别?并且在引用数据库模式中的非任意词时可以理解 3NF 和 BCNF 之间的区别。正如问题中给出的那样,在尝试确定具有简化关系的关系时,我最终迷失了方向。

有人可以解释上面是如何确定候选键的,为什么 R 在 3NF 中而不是 BCNF 中?

4

1 回答 1

5

你同时问了几个问题。

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

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

为此,您不需要钥匙。您需要做的就是测试每个重要的函数依赖,左侧是关系的超键。

您如何为 FD 确定这一点?简单地计算 FD 左侧的闭包。如果结果是关系的所有属性,那么它是一个超键。

  1. 如何确定关系是否为 3NF?

FD 必须采用规范形式:右侧有一个属性。

对于每个非平凡的 FD,左手是超级密钥(如在 BCNF 中)或右手是密钥的一部分(任何密钥)。

这是一个很好的视频,解释了这些差异:

BCNF 与 3NF

于 2016-10-31T00:40:39.697 回答