(1)范式概述和作用
- 范式来自英文Normal form,简称NF。要想设计—个好的关系,必须使关系满足一定的约束条件,此约束已经形成了规范,分成几个等级,一级比一级要求得严格。满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常,避免可能存储了大量不需要的冗余信息。
- 目前关系数据库有六种范式
- 第一范式(1NF)
- 第二范式(2NF)
- 第三范式(3NF)
- 巴斯-科德范式(BCNF)
- 第四范式(4NF)
- 第五范式(5NF,又称完美范式)
- 在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推
- 一般来说,数据库只需满足第三范式(3NF)就行了
(2)第一范式
- 每一列都是不可分割的原子数据项
- 下面的“系”列可以分割,不符合第一范式

- 存在的问题
- 系名、系主任、姓名数据冗余
- 添加一个新的系名、系主任时,数据不合法,没有学号、姓名、课程名称、分数
(3)第二范式
- 在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
函数依赖
函数依赖:A—>B,如果A属性(属性组)的值,可以确定唯一B属性的值,则称B依赖于A 例如:学号—>姓名 (学号,课程名称)—> 分数
完全函数依赖
完全函数依赖:A—>B,如果A属性(属性组),B属性值的确认需要A中的所有属性 例如:(学号,课程名称)—> 分数
部分函数依赖
部分函数依赖:A—>B,如果A属性(属性组),B属性值的确认只需要A中的部分属性 例如:(学号,课程名称)—> 姓名
传递函数依赖
例如:学号—>系名—>系主任
码
- 主属性
- 非主属性
如果一张表中,一个属性(组)被其他所有属性完全依赖,则称这个属性(组)为该表的码 主属性:码属性组的所有属性 非主属性:除码属性组中的所有属性 例如:上述表的码是 (学号,课程名称)
- 优化之后的表

(3)第三范式
- 在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

