DBMS中3NF和BCNF的区别

DBMS中3NF和BCNF的区别

1. 第三范式(3NF)

一个关系被称为第三范式(3NF),如果它是 2NF 并且当没有非键属性传递依赖于主键时,即没有传递依赖。它还应满足以下给定条件之一。对于函数依赖 C->D:

  • C 应该是一个超级键,并且,
  • D 应该是主要属性,即 D 应该是候选键的一部分。

3NF 用于减少数据重复并获得数据完整性。

例子:

对于关系 R(L, M, N, O, P) ,函数依赖为 {L->M, MN->P, PO->L}

The candidate keys will be : {LNO, MNO, NOP}
      as the closure of LNO = {L, M, N, O, P} 
             closure of MNO = {L, M, N, O, P}
             closure of NOP = {L, M, N, O, P}

这种关系在 3NF 中,因为它已经在 2NF 中并且没有传递依赖。也没有派生非主要属性的非主要属性。

2. Boyce-Codd 范式(BCNF)

BCNF 代表 Boyce-Codd 范式,由 R.F Boyce 和 E.F Codd 在 1974 年提出。如果这些属性成立,则称函数依赖在 BCNF 中:

  • 它应该已经在 3NF 中。
  • 对于函数依赖说 P->Q,P 应该是一个超级键。

BCNF 是 3NF 的扩展,它的规则比 3NF 更严格。此外,它被认为比 3NF 更强。

例子:

对于具有函数依赖关系的关系 R(A, B, C, D){A->B, A->C, C->D, C->A}

The candidate keys will be : {A, C}
      as the closure of A = {A, B, C, D} 
             closure of C = {A, B, C, D}

这种关系在 BCNF 中,因为它已经在 3Nf 中(没有主属性派生没有主属性),并且在函数依赖的左侧有一个候选键。

3NF 和 BCNF 的区别:

编号 3NF BCNF
1 在 3NF 中不应该有传递依赖,即没有非素数属性应该传递依赖于候选键。 在任何关系 A->B 的 BCNF 中,A 应该是关系的超级键。
2 3NF不如BCNF强。 BCNF比3NF相对更强。
3 在 3NF 中,功能依赖已经存在于 1NF 和 2NF 中。 在 BCNF 中,功能依赖关系已经存在于 1NF、2NF 和 3NF 中。
4 3NF冗余度高。 BCNF 的冗余度相对较低。
5 在 3NF 中保留了所有的函数依赖。 在 BCNF 中,可能会或可能不会保留所有功能依赖关系。
6 3NF比较容易实现。 BCNF很难实现。
7 3NF可以实现无损分解。 在 BCNF 中很难实现无损分解。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程