BCNF、3NF 和候选键

sud*_*fee 2 database 3nf candidate-key bcnf

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

考虑R = (A, B, C, D)与函数依赖关系:

AB -> C
C -> D
D -> A
Run Code Online (Sandbox Code Playgroud)

问题包括:

一种。列出 R
b的候选键。确定 R 是否在 BCNF 或 3NF 中。

解决方案解决

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

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

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

dmg*_*dmg 5

你同时问了几个问题。

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

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

为此,您不需要钥匙。你需要做的就是测试每个非平凡的函数依赖,左边是关系的超键。

对于 FD,您如何确定这一点?只需计算 FD 左侧的闭合。如果结果是关系的所有属性,那么它就是一个超键。

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

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

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

这是一个非常不错的视频,解释的差异:

BCNF 与 3NF