DBMS中1NF和2NF的区别
1. 第一范式(1NF)
对于任何符合第一范式 (1NF) 的关系,该关系不应包含任何复合或多值属性。因此,如果关系包含原子值,它将处于第一范式。关系应该只包含单值属性。因此,处于第一范式的关系必须遵循以下规则:
- 关系中不应该有重复的组或元素,即它应该只包含单值属性。
- 应该为表中的每个属性指定一个唯一名称。
- 它不应包含任何复合属性。
例子:
考虑以下关系:
这种关系在 1NF 中,因为它不包含任何多值或复合属性。
2. 第二范式(2NF)
第二范式的基本概念是全函数依赖。因此它适用于包含复合键的关系(其中主键由多个属性组成)。因此,任何包含单个属性主键的关系始终是 2NF(第二范式)。因此,包含复合主键以便在 2NF 中的关系不应包含任何部分依赖。当任何非素数属性依赖于候选键的任何适当子集时,就会发生部分依赖。因此,每个非素数属性都应该依赖于关系中的每个候选键的整体。因此,一个关系在 2NF 中,如果:
- 它是 1NF(第一范式)。
- 它不包含任何部分依赖。
例子:
考虑关系 R(X, Y, E, F) 的函数依赖关系。
{XY->EF, E->F}
因此,我们找到 (XY) 的闭包,即 {X, Y, E, F}
由于它的闭包包含关系中的所有属性,因此 XY 是候选键。对于每个函数依赖,即 XY->EF
:
它不包含任何部分依赖,因为非主要属性依赖于整个候选键。
E->F:它不包含任何部分依赖,因为这里的非素数属性仅相互依赖。
1NF 和 2NF 的区别:
编号 | 1NF | 2NF |
---|---|---|
1 | 在 1NF 中,任何关系都必须是原子的,并且不应包含任何复合或多值属性。 | 在 2NF 中,任何关系都必须在 1NF 中并且不应该包含任何部分依赖。 |
2 | 函数依赖的识别对于第一范式来说不是必须的。 | 第二范式需要函数依赖的识别。 |
3 | 第一范式只处理表的模式,不处理更新异常。 | 第二范式处理更新异常。 |
4 | 1NF 中的关系可能在也可能不在 2NF 中。 | 2NF 中的关系总是在 1NF 中。 |
5 | 第一范式的主键可以是复合键。 | 第二范式的主键不能是复合键,以防它产生任何部分依赖。 |
6 | 第一范式的主要目标是消除表内的冗余数据。 | 第二范式的主要目标是真正保证数据的依赖关系。 |
7 | 第一个范式比第二个范式强。 | 第二范式比第一范式强。 |