DBMS中2NF和3NF的区别
1. 第二范式(2NF)
当一个关系已经处于第一范式并且不存在非素数属性应该在功能上依赖于素数属性的部分函数依赖时,则称该关系处于第二范式。它是由 E.F Codd 在 1971 年给出的。如果候选键仅包含单个属性并且关系在 1NF 中,那么它已经在 2NF 中。2NF 检查关系的概念适用于当候选键包含多个属性的复合候选键时。
例子:
考虑具有函数依赖关系的关系 R(A, B, C, D):{AB–>CD, BC–>D}
Closure of (AB)={A, B, C, D}
所以 AB 是候选键。
关系 R 在 1NF 中,因为关系 DBMS 不允许多值或复合属性。
在 AB->CD 中(AB 是候选键,C,D 是非素数)
在 BC–>D 中(BC 是非质数,D 是非质数,这在 2NF 中是允许的)
关系 R 在 2NF 中,因为没有素数属性派生出不存在部分函数依赖的非素数属性。
关系 R 不在 3NF 中,因为非主属性派生非主属性。
2. 第三范式(3NF)
当一个关系已经处于第一范式和第二范式并且每个非素数属性都非传递地依赖于关系的超键或者在简单的语言中没有传递函数依赖时,就称该关系处于第三范式。它也是由 E.F Codd 在 1971 年给出的。在这种形式中,数据重复减少并确保了参照完整性。如果以下任一条件为真,则具有函数依赖 A–>B 的关系 R 处于 3NF 中。
- A 是一个超级键。
- B是主要属性,即B是候选键的一部分。
例子:
考虑具有函数依赖关系的关系 R(A, B, C) {AB–>C, C–>A}
Closure of (AB)={A, B, C}
Closure of (BC)={A, B, C}
Candidate keys are -{AB, BC}
关系 R 在 1NF 中,因为关系 DBMS 不允许多值或复合属性。
AB-->C(prime deriving prime)
C-->A(prime deriving prime)
所以关系 R 在 2NF 和 3NF 中也是因为没有素数派生非素数和非素数派生非素数,即没有部分函数依赖和传递函数依赖。
2NF和3NF的区别:
编号 | 2NF(第二范式) | 3NF(第三范式) |
---|---|---|
1 | 2NF已经在1NF。 | 3NF已经在 1NF 和 2NF 中。 |
2 | 在 2NF 中,允许非主属性在功能上依赖于非主属性。 | 在 3NF 中,非主属性只允许在功能上依赖于关系的超级键。 |
3 | 2NF不允许非主属性的部分函数依赖于候选键的任何真子集。 | 3NF不允许非主属性对任何超键的传递函数依赖。 |
4 | 2NF比 1NF 强但小于3NF 的范式 | 比 1NF 和 2NF 强的范式。 |
5 | 2NF消除了相关的重复组。 | 3NF实际上消除了所有冗余。 |
6 | 第二范式的目标是消除冗余数据。 | 第三范式的目标是确保参照完整性。 |