MySQL(4)三大范式
目前关系数据库有六种范式:
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯范式(BCNF)、第四范式(4NF)和第五范式(5NF)。
一般来说,数据库只需满足第三范式(3NF)就行了
第一范式1NF
所谓第一范式是指在关系模式中,每个属性是不可再分的,否则设计成一对多的实体关系。
不满足第一范式不能称之为关系型数据库。
例:
“院系信息”由两部分组成,不符合第一范式的要求。需要把院系信息分为系号和系主任,就满足了第一范式。
从表中看出,很多数据多处重复,出现数据冗余的问题。
如果新开一个系来招收学生,那么系名和系主任无法插入表中,会出现插入异常的问题。
- 仅从符合1NF的关系数据表设计,存在很多问题,需要提高设计的标准,则继续了解第二范式。
第二范式2NF
在1NF的基础上,关系中每一个非主属性完全依赖于R的某个主关键字。如果不是完全依赖主键,应该拆分成新的实体,设计成一对多的实体关系。
- 所有非主属性完全依赖于主键
- 消除存在非主属性对主键的部分函数依赖
例: - 学生表(学号,姓名,课程号,课程成绩,性别,年龄)
- 主键(学号,课程号),为联合主键
部分依赖:学号–姓名 ,学号–性别 ,学号–年龄
完全依赖:课程成绩—(学号,课程号) - 改为第二范式
学生表(学号,姓名,性别,年龄) 主键:学号
课程成绩表(课程号,学号,成绩) 主键:(课程号,学号)
第三范式3NF
满足第二范式的基础上,非主属性既不存在部分函数依赖也不存在传递依赖,则称该关系模式R属于第三范式。
- 消除非主属性对主键的传递函数依赖
例: - 学生表(学号、姓名、性别、年龄、学院号、学院名称、学院电话)
- 主键:学号
学生姓名—学号 ; 性别—学号 ; 年龄—学号 ; 学院名称—学号;
学院电话—>学号—>查询学院号—>查询学院电话;存在传递依赖 - 改为第三范式:
学生表(学号、姓名、性别、年龄、学院号) 主键:学号
学院表(学院号、学院名称、学院电话)主键:学院号