数据库三大范式定义与理解

一、第一范式(1NF)

要求:

要求:每一个分量必须是不可分的数据项。

特点:

1)有主键,且主键不能为空。

2)字段不能再分。

示例:(以下例子不满足第一范式)


学号 年龄 信息
101 19 湖北武汉市,电话:12345678
101 20 湖北

主键:学号

不满足原因:1)主键重复。2信息字段可以再分

二、第二范式(2NF)

要求:在范式一的基础上,且每一个非主属性完全函数依赖于主键。

特点:

1)满足第一范式。

2)表中的每一个非主属性,必须完全依赖于本表主键。

3)只有当一个表中,主键由两个或以上的属性组成的时候,才会出现不符合第二范式的情况。

示例:(以下例子不符合第二范式)

学号 课程号 得分 课程名
101 003 95 数据库
主键:学号,课程号
不满足原因:课程名不完全依赖于所定义的所有主键,课程名部分依赖于主键课程号

三、第三范式(3NF)


要求:在第二范式的基础上,且消除传递依赖性

1)满足第二范式

2)所有的非主键列依赖于主键列

注:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余,但是没有数据冗余的数据库并不一定是最好的数据库,所以有没有冗余的设计,要综合来考虑

学生 课程 老师 老师职称 教室 上课时间
小明 语文 王五 讲师 110 8:30
主键:学生、课程

上面的学生上课表符合2NF,可以这样验证:两个主属性单独使用,不用确定其它四个非主属性的任何一个。但是它有传递依赖!在老师老师职称这里,一个老师一定能确定一个老师职称。

如果不消除这种传递依赖,有可能会出现:

1、老师职称变了,变教授了,要改数据库,表中有N条,改了N……(修改异常)

2、没人选这个老师的课了,老师的职称也没了记录……(删除异常)

3、新来一个老师,还没分配教什么课,他的职称记到哪?……(插入异常)

所以为了解决这些问题应把表拆分成:

学生 课程 老师 教室 上课时间
小明 语文 王五 110 8:30

老师 老师职称
大宝 讲师



版权声明:本博客为记录本人自学感悟,内容大多从网上学习与整理所得,若侵权请告知!

https://mp.csdn.net/postedit/80365677

猜你喜欢

转载自blog.csdn.net/qq_39657909/article/details/80555181