数据库三大范式定义与理解
一、第一范式(1NF)
要求:
要求:每一个分量必须是不可分的数据项。
特点:
1)有主键,且主键不能为空。
2)字段不能再分。
示例:(以下例子不满足第一范式)
| 学号 | 年龄 | 信息 |
| 101 | 19 | 湖北武汉市,电话:12345678 |
| 101 | 20 | 湖北 |
主键:学号
不满足原因:1)主键重复。2)信息字段可以再分
二、第二范式(2NF)
要求:在范式一的基础上,且每一个非主属性完全函数依赖于主键。
特点:
1)满足第一范式。
2)表中的每一个非主属性,必须完全依赖于本表主键。
3)只有当一个表中,主键由两个或以上的属性组成的时候,才会出现不符合第二范式的情况。
示例:(以下例子不符合第二范式)
| 学号 | 课程号 | 得分 | 课程名 |
| 101 | 101 | 95 | 数据库 |
主键:学号,课程号
不满足原因:课程名不完全依赖于所定义的所有主键,课程名部分依赖于主键课程号。
三、第三范式(3NF)
要求:在第二范式的基础上,且消除传递依赖性
1)满足第二范式
2)所有的非主键列依赖于主键列
注:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余,但是没有数据冗余的数据库并不一定是最好的数据库,所以有没有冗余的设计,要综合来考虑
学生 课程 老师 老师职称 教室 上课时间
小明 语文 王五 讲师 110 8:30
主键:学生、课程
上面的“学生上课表”符合2NF,可以这样验证:两个主属性单独使用,不用确定其它四个非主属性的任何一个。但是它有传递依赖!在“老师”和“老师职称”这里,一个老师一定能确定一个老师职称。
如果不消除这种传递依赖,有可能会出现:
1、老师职称变了,变教授了,要改数据库,表中有N条,改了N次……(修改异常)
2、没人选这个老师的课了,老师的职称也没了记录……(删除异常)
3、新来一个老师,还没分配教什么课,他的职称记到哪?……(插入异常)
所以为了解决这些问题应把表拆分成:
| 学生 | 课程 | 老师 | 教室 | 上课时间 |
| 小明 | 语文 | 王五 | 110 | 8:30 |
| 老师 | 老师职称 |
| 老师职称 | 讲师 |
————————————————
版权声明:本文为CSDN博主「叁木-Neil」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39657909/article/details/80555181

浙公网安备 33010602011771号