240
世界上有10种人,一种懂二进制,另一种不懂二进制。

[转]数据库三大范式最简单的解释(整合)

1 前言
关系数据库中的关系必须满足一定的要求,即满足不同的范式。

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。

满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。

一般说来,数据库只需满足第三范式(3NF)就行了。

2 简介
很多资料上的范式都讲的很难理解,这里总结一下三大范式,便于读者简易的理解。
1NF:字段是原子性的,不可分(即列不可分)
2NF:有主键,非主键字段依赖主键。确保一个表只说明一个事物(即不存在部分依赖)
3NF:非主键字段不能相互依赖。 每列都与主键有直接关系,不存在传递的依赖(即不存在传递依赖)
第一范式:不符合第一范式的例子:
表:字段1、 字段2(字段2.1、字段2.2)、字段3 ......
第二范式:不符合第二范式的例子:
表:学号、课程号、姓名、学分;
这个表明显说明了两个事务:学生信息, 课程信息;由于非主键字段必须依赖主键,这里学分依赖课程号,姓名依赖与学号,所以不符合二范式。
第三范式:不符合第三范式的例子:
表:学号、姓名、 年龄、 所在学院、学院联系电话、学院联系电话
存在依赖传递: (学号) → (所在学院) → (学院地点, 学院电话)

 

3 解释

1NF:原子性,即字段不可以再分。
2NF:唯一性,不可以把多种数据保存在同一张表中,即一张表只能保存“一种”数据。
不符合第二范式的表:学号, 姓名, 年龄, 课程名称, 成绩, 学分;

可能会存在问题:
数据冗余,每条记录都含有相同信息;
删除异常:删除所有学生成绩,就把课程信息全删除了;
插入异常:学生未选课,无法记录进数据库;
更新异常:调整课程学分,所有行都调整。

正确做法:
学生:Student(学号, 姓名, 年龄);
课程:Course(课程名称, 学分);
选课关系:StudentCourse(学号, 课程名称, 成绩)。

3NF:直接性,每一列都和主键直接相关,而不能间接相关。(依赖不准传递)

不符合第三范式的表: 学号, 姓名, 年龄, 学院名称, 学院电话,因为存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。

可能会存在问题:

数据冗余:有重复值;
更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况

正确做法:

学生:(学号, 姓名, 年龄, 所在学院);

学院:(学院, 电话)。

参考:

1.https://blog.csdn.net/andywuchuanlong/article/details/25913235

2.https://blog.csdn.net/chenyyhh92/article/details/51174343 

posted @ 2019-03-12 16:34  unionline  阅读(1865)  评论(0编辑  收藏  举报