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 中很难实现无损分解。 |