1NF(第一范式)
强调的是列的原子性,即列不能够再分成其他几列,限定条件如下:
- 每个列必须有一个唯一的名称
- 行和列的次序无关紧要
- 每一列都必须有单个数据类型
- 不允许包含相同值的两行
- 每一列都必须包含一个单值 (一个列不能保存多个数据值)
- 列不能包含重复的组
第一范式会存在更新、删除和插入异常。
2NF(第二范式)
2NF的限定条件如下:
- 它符合第一范式
- 所有的非键值字段均依赖于所有的键值字段
几个概念
A)函数依赖:A—>B,如果通过A的属性(属性组)的值,可以唯一确定B的属性的值。则称B依赖于A。Eg:学号—>姓名。(学号,课程名称)—> 分数
B)完全函数依赖: A–>B,如果A是一个属性组,则B属性值的确定需要依赖A属性组中所有的属性值。
例如:(学号,课程名称)—> 分数
C)部分函数依赖:A—>B,如果A是一个属性组,B属性值的确定只需要依赖A属性组中某一些值即可。例如:(学号,分数)—> 姓名
D)传递函数依赖:A—>B,B—>C,传递唯一时,则称C函数传递依赖与A
E)码:如果在一张表中,一个属性或者属性组,被其他属性所完全依赖,则称这个属性(属性组)为该表的码。
主属性:码属性组中的所有属性;
非主属性:其他属性
第二范式也会存在更新、删除和插入异常。
3NF(第三范式)
3NF的限定条件如下:
- 符合2NF
- 不包含传递相关性(即,一个非键值字段的值依赖于另一个非键值字段的值)。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。