sql三大范式理解

目前关系数据库有六种范式:

1. 第一范式(1NF)(针对具体某一列)
2.第二范式( 2NF )(针对某一列与复合主键的一部分有关)
所谓第二范式,是指所有的非主属性都完全依赖于关键字。从这个定义可以看出,第二范式不存在非主属性对于部分候选关键字的部分依赖,不过允许非主属性之间存在着传递依赖。

3、第三范式(3NF)(针对某一列与主键无关,但是与某一非主键列有关)
所谓第三范式,是指每一个非主属性既不部分依赖于也不传递依赖于关键字,也就是在第二范式的基础上消除传递依赖(A>B>C)。

4、BCNF 巴斯-科德范式(针对某一列与复合主键中的某一列有关,而与其他主键无关)
所谓BCNF,是指在第三范式的基础上进一步消除主属性对于码的部分函数依赖和传递依赖。BCNF需要符合3NF,并且,主属性不依赖于主属性。

5、4NF(第四范式)
对于第四范式,从理论层面来讲是,关系模式R∈1NF,如果对于R对于R的每个非平凡多值依赖X→→Y(Y不属于X),X都含有候选码,则R∈4NF。4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。显然一个关系模式是4NF,则必为BCNF。

6、5NF(第五范式)
第五范式(5NF):是最终范式。消除了4NF中的连接依赖。


通常我们常用的就是第一范式(1NF)、第二范式(2NF)、

第三范式(3NF),就是本文要讲的“三大范式”。

第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项

举例说明:

 在上面的表中,“家庭信息”和“学校信息”列均不满足原子性的要求,故不满足第一范式,调整如下:

 可见,调整后的每一列都是不可再分的,因此满足第一范式(1NF);

第二范式(2NF):在1NF的基础上,确保表中的每列都和主键相关

第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

 如上图,像班级地址和班主任在学生表里就是可以不用出现的,跟学生信息不是直接的关系,地址和老师应该在班级信息表里出现,所以这个表是没有遵循第二范式的基本原则。

第三范式(3NF) :确保每列都和主键列直接相关,而不是间接相关

 上图,所有属性都完全依赖于学号,所以满足第二范式,但是“班主任性别”和“班主任年龄”直接依赖的是“班主任姓名”,而不是主键“学号”,所以需做如下调整:

这样修改后,就满足了第三范式的要求。

总结:范式就是用来规范数据库的设计,是为了在设计中更好的解决数据冗余,数据有效性检查,提高存储效率。 数据规范设计之后从而带来的弊端就是会影响性能。
注意:所谓的范式,是用来学习参考的,设计的时候根据情况来设计数据库,不用完全按照范式设计。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值