数据库三大范式

一、第一范式(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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值