一、第一范式(1NF)

要求:

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

特点:

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

2)字段不能再分。

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


学号年龄信息
10119湖北武汉市,电话:12345678
10120湖北
主键:学号

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

二、第二范式(2NF)

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

特点:

1)满足第一范式。

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

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

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

学号课程号得分课程名
10100395数据库主键:学号,课程号不满足原因:课程名不完全依赖于所定义的所有主键,课程名部分依赖于主键课程号。
三、第三范式(3NF)

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

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

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



学生课程老师老师职称教室上课时间
小明语文王五讲师1108:30主键:学生、课程
上面的“学生上课表”符合2NF,可以这样验证:两个主属性单独使用,不用确定其它四个非主属性的任何一个。但是它有传递依赖!在“老师”和“老师职称”
这里,一个老师一定能确定一个老师职称。


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

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

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

3、新来一个老师,还没分配教什么课,他的职称记到哪?……(插入异常)
所以为了解决这些问题应把表拆分成:


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


老师老师职称
大宝讲师









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

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

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信