数据库-对三大范式的理解

三大范式

目前的关系型数据库设计有六种范式,分别是:第一范式(1NF),第二范式(2NF),第三范式(3NF),巴斯-科德范式(BCNF),第四范式(4NF)和第五范式(5NF)。
后三种我们都不常使用,我们最常用的就是前三种:第一范式、第二范式和第三范式。

第一范式(1NF)

第一范式:要求数据库表的每一列都是不可分割的原子数据项。
在这里插入图片描述
上面这个表,我们发现在联系方式这列,可以再进行拆分,这就不满足第一范式。改进后如下:
在这里插入图片描述
现在每一列的数据都已经不可再分了,即每一列都是一个原子数据项,满足第一范式。

第二范式(2NF)

第二范式:在满足第一范式的基础上,非码属性必须完全依赖于候选码,在第一范式的基础上消除非主属性对主码的部分函数依赖。
通俗来说,就是在满足第一范式的基础上,表中的每一列都和主键相关,不能只与部分主键相关(主要针对联合主键),就是为了保证一张表中只有一列作为主键,防止多列作为主键,而非主键列都和主键列相关。
在这里插入图片描述

对于上面的表,我们发现,学号为主键,但是专业,学制,班主任和职称与学号并无关联,我们就可以对其做优化,优化如下:
在这里插入图片描述
经过上述优化,我们发现两张表中的数据都与各自表中的主键相关,学生表中的数据都与学号相关,而班主任表中的数据都与班主任职工号相关。这就满足第二范式。

第三范式(3NF)

第三范式:在满足第二范式的基础上,任何非主属性不依赖于其他非主属性,在第二范式的基础上消除传递依赖。
通俗来说,就是在满足了第二范式的基础上,表中的每一个数据都和主键直接相关,不能存在间接相关的列。
在这里插入图片描述
在第三范式看来,上述优化也有点问题,职工号与学号并无直接相关的联系,它们是通过班级连接起来的,所以我们对上述优化再做优化,如下:

在这里插入图片描述
现在的表中数据都是与主键直接相关了,班级和教师之间通过另一个管理关系联系在一起,学生直接属于班级,班级又直接属于老师管理,都是直接相关。

我们发现经过优化后的数据表,不仅能减少数据的冗余,数据表也更加的清晰,一张数据表就专注的记录一种数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值