首页 > 解决方案 > 这是违反 BCNF 吗?

问题描述

我读了很多例子,只要没有重叠的候选键,3NF 就是 BCNF ......

鉴于:

R(a,b,c,d,e,f)
a,b,c -> d 
a,b,c -> e 
a,b,c -> f

所以,a,b,c 是唯一的候选键。到目前为止,它是 BCNF。

现在,我添加了 FD f-> c ,它是非素数 -> 素数,但我仍然没有重叠的候选键。

我是回到 3NF 还是仍然在 BCNF?

标签: database-normalizationbcnf

解决方案


如果您添加一个新的 FD,那么您必须重新确定 CK,哪些属性是素数和非素数,是否在 3NF 中,是否有重叠的 CK 以及是否在 BCNF 中。

我们有一个新的给定封面,其中有一个 FD。(如果我们想要现在所有的 FD,那么我们必须重新应用 Armstrong 公理。如果我们想要新覆盖的最小覆盖,那么我们必须计算它。)应用 CK 的定义和/或算法来找到 CK,我们有 CK {a,b,c} 和 {a,b,f}。非主要属性是 d & e。应用 3NF 的定义,例如每个非素数属性在功能上非传递地依赖于每个 CK,我们有 3NF。有重叠的 CK,所以我们可能没有 BCNF。应用 BCNF 的定义,例如非平凡 FD 的每个行列式都是超级密钥,我们注意到 f->c 不是超级密钥,所以我们没有 BCNF。


推荐阅读