2NF 和 3NF 的一般定义的应用可以识别由违反一个或多个候选键的依赖性引起的额外冗余。然而,尽管有这些额外的限制,依赖关系仍然存在,这将导致 3NF 关系中存在冗余。 3NF 的这一弱点导致了一种更强的范式的出现,称为博伊斯-科德范式 (Codd, 1974)。
尽管对于关系数据库来说,3NF 是足够的范式,但是,如果 X 不是给定关系的候选键,那么这个 (3NF) 范式可能不会因为 X?Y 函数依赖而消除 100% 的冗余。这可以通过 Boyce-Codd 范式 (BCNF) 解决。
博伊斯-科德范式 (BCNF):
Boyce–Codd Normal Form (BCNF) 基于函数依赖,它考虑了关系中的所有候选键;然而,与 3NF 的一般定义相比,BCNF 也有额外的限制。
一个关系在 BCNF 中 iff,X 是给定关系中每个函数依赖 (FD) X?Y 的超键。
换句话说,
A relation is in BCNF, if and only if, every determinant is a Form (BCNF) candidate key.
注意——为了测试一个关系是否在 BCNF 中,我们识别所有的决定因素并确保它们是候选键。
您在计算理论中遇到了一个类似的层次结构,称为乔姆斯基范式。现在,仔细研究上面的层次结构。可以推断出, BCNF 中的每个关系也都在 3NF 中。换句话说,3NF 中的关系不需要在 BCNF 中。想一想这句话。
要确定具有函数依赖关系的给定关系 R 的最高范式,第一步是检查 BCNF 条件是否成立。如果发现 R 在 BCNF 中,则可以安全地推断出该关系也在 3NF、2NF 和 1NF 中,如层次结构所示。 1NF 的限制最少——它只需要关系 R 在每个元组中具有原子值。 2NF 有一个稍微更严格的约束。
阅读本文以清楚了解 2NF
3NF 比前两个范式具有更多的限制性约束,但比 BCNF 的限制性小。以这种方式,随着我们向下遍历层次结构,限制会增加。
示例 1:
找到关系 R(A, B, C, D, E) 的最高范式,FD 设置为:
{ BC->D, AC->BE, B->E }
解释:
- Step-1:如我们所见,(AC)+ ={A, C, B, E, D} 但它的子集都不能确定关系的所有属性,所以 AC 将是候选键。 A 或 C 不能从关系的任何其他属性派生,因此将只有 1 个候选键 {AC}。
- 步骤 2:质数属性是本示例中属于候选键 {A, C} 的那些属性,而其他属性在本示例中将是非质数 {B, D, E}。
- 步骤 3:关系 R 是第一范式,因为关系 DBMS 不允许多值或复合属性。
关系是第二范式,因为 BC->D 是第二范式(BC 不是候选键 AC 的真子集)并且 AC->BE 是第二范式(AC 是候选键)和 B->E是第二范式(B 不是候选键 AC 的真子集)。
该关系不是第三范式,因为在 BC->D(BC 既不是超级键,D 也不是主要属性)和 B->E(B 既不是超级键,E 也不是主要属性)中满足第三个标准,FD 的 LHS 应该是超级键,或者 RHS 应该是主要属性。所以关系的最高范式将是第二范式。
注 –主属性不能传递依赖于 BCNF 关系中的键。
考虑一些关系 R 的这些函数依赖,
AB -> C
C->B
AB -> B
假设,已知R的唯一候选键是AB。需要仔细观察才能得出上述依赖项是传递依赖项的结论,因为主要属性 B 传递依赖于键 AB 到 C。 现在,第一个和第三个 FD 都在 BCNF 中,因为它们都包含候选键(或简单地KEY)在他们的左侧。但是,第二个依赖项不在 BCNF 中,但由于右侧存在主要属性,因此肯定在 3NF 中。因此,R 的最高范式是 3NF,因为所有三个 FD 都满足处于 3NF 中的必要条件。
示例 2:
例如考虑关系 R(A, B, C)
A -> BC,
B -> A
A 和 B 都是超级键,所以上面的关系在 BCNF 中。
笔记 –
BCNF 分解可能始终无法在保留依赖关系的情况下进行,但是,它始终满足无损连接条件。例如,关系 R (V, W, X, Y, Z),具有函数依赖:
V, W -> X
Y, Z -> X
W -> Y
它不会满足依赖保留 BCNF 分解。
注意 -:冗余有时仍然存在于 BCNF 关系中,因为并不总是可以完全消除它们。
参考:
第 4 和第 5 范式并找到给定关系的最高范式。