MySQL三范式详细解析
规范化
规范化(Normalization)是用于数据库设计的一系列原理和技术,它可以减少表中数据的冗余,增加数据完整性和一致性。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
一般情况下满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般来说,数据库只需满足第三范式(3NF)就行了。
第一范式
第一范式(1NF)是指表中的字段都是不可再分的原子属性,同时表需要有一个主键。
第二范式
第二范式(2NF)首先需要满足第一范式,非主键字段必须完全依赖于主键字段,不能只依赖于主键的一部分。(部分依赖)
即在满足第一范式的基础上,还要满足数据表里的每一条数据记录,都是可唯一标识的,而且所有非主键字段,都必须完全依赖主键,不能只依赖主键的一部分。
例如不符合第二范式的:
学号 | 姓名 | 课程名 | 成绩 | 学分 |
1 | 张三 | MySQL | 100 | 2 |
1.此表中主键为学号和课程名复合主键
2.姓名只依赖于学号,不依赖于课程名,即部分依赖
3.学分只于课程名有关系,与学号没有关系
改进结果(分为三个表):
学号 | 姓名 | 年龄 |
课程编号 | 课程名 | 学分 |
学号 | 课程编号 | 成绩 |
第三范式
第三范式(3NF)首先需要满足第二范式,非主键字段
不能依赖于其他非主键字段。(传递依赖)
例如不符合第三范式的例子:
学号 | 学生姓名 | 学校名 | 学院 | 学院地址 | 学院电话 |
---|---|---|---|---|---|
2025 | 小肖 | 武汉大学 | 计科院 | 中国 | 1069 |
1.学院地址与学院电话与主键学号没有依赖关系
2.学院地址与学院电话与学校有依赖关系
3.学院与主键学号有依赖关系,从而达到间接依赖
改进结果(分为两个表):
学号 | 学生姓名 | 学校名 | 学院编号 |
学院编号 | 学院地址 | 学院电话 |
具体实例:
||
不符合第一范式的地方:
问题:表中电话中有的是手机电话,有的是手机电话和座机电话合并。
改进:将电话分为工作电话和个人电话,字段为null则没有该电话
不符合第二范式的地方:
问题:在上述该表中主键为姓名与部门名称组合的复合主键,而部分地址与姓名没有关系,只与部门名称存在关联,即部分依赖。
改进:1.创建一个部门表,含有部门名称和部门地址字段,以部门编号作为主键。
2.在原来表中,删除部门名称和部门地址字段,并加入工号作为唯一标识即主键,将部门表中部门编号与主表中工号关联起来。
不符合第三范式的地方:问题:主表中最低月薪与最高月薪与主键没有什么依赖关系,只与职位相依赖,而职位才与工号相关。
改进:1.创建一个职位表,其中含有职位编号作为主键,职位名称,最低月薪,最高月薪。
2.在主键中将最低月薪和最高月薪,职位名称删去,用职位表中主键职位编号与主表中工号相关联
||