数据库之”范式“

数据库之”范式“

范式(NF)

关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。各个范式之前的范围关系有5NF>4NF>BCNF>3NF>2NF>1NF

常见范式

1NF

每一个属性必须是不可分的数据项

2NF

满足1NF,并且每一个非主属性完全依赖任何一个候选码

3NF

满足2NF,并且每一个非主属性不传递依赖于码

函数依赖

在这里插入图片描述

简单地说 如果属性或者属性组X唯一确定性或者属性组Y,则称: Y函数依赖于X

完全函数依赖与部分函数依赖

在这里插入图片描述

举例:有关系模式S-L-C(Sno,Sdept,Sloc,Cno,Grade)Sno:学生学号 |Sdep:学生专业| Sloc:学生住处|Cno:课程编号|Grade:成绩
有函数依赖(Sno,Cno)-> Sdep 这个函数依赖就是部分函数依赖
因为Sno ->Sdep 并且Sno是(Sno,Cno)的真子集
Sno ->Sdep这个函数依赖是一个完全函数依赖

在这里插入图片描述

候选码

设 K 为某表中的一个属性或属性组,若除 K 之外的所有属性都完全函数依赖于 K(这个“完全”不要漏了),那么我们称 K 为候选码,简称为码。在实际中我们通常可以理解为:假如当 K 确定的情况下,该表除 K 之外的所有属性的值也就随之确定,那么 K 就是码。一张表中可以有超过一个码。(实际应用中为了方便,通常选择其中的一个码作为主码) 例如:对于表3,(学号、课名)这个属性组就是码。该表中有且仅有这一个码。(假设所有课没有重名的情况)
参考https://blog.csdn.net/wenco1/article/details/88077279

超码

它是候选码的超集
所以它的定义和候选码的定义只差在 所有属性是完全依赖还是部分依赖

主码

当候选码有多个时候可以选择其中一个作为主码

主属性|非主属性|全码

主属性

包含在任何一个候选码中的属性称为主属性

非主属性

不包含在任何候选码中的属性称为非主属性

全码

最极端情况下,整个属性组是码,称为全码

主码和候选码有时都被简称为码

规范化

一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫”规范化“

规范化举例

场景

有关系模式S-L-C(Sno,Sdept,Sloc,Cno,Grade)Sno:学生学号 |Sdep:学生专业| Sloc:学生住处|Cno:课程编号|Grade:成绩 并且每个专业的学生住在同一个地方

分析

1、符合1NF
2、确定S-L-C的码为(Sno,Cno)
3、分析函数依赖
在这里插入图片描述

在这里插入图片描述

根据2NF定义:
满足1NF,并且每一个非主属性完全依赖任何一个候选码
本例子中非主属性Sdept,Sloc并不完全函数依赖于码(Sno,Cno)所以S-L-C不是2NF

不符合2NF导致的问题

插入异常:
想要插入数据 Sno=S7,Sdept=PHY,Sloc=BLD2 但是没有选课即没有Cno此时无法插入 因为插入元组时必须给定码值,这里缺少Cno所以整条记录无法插入。

删除异常
如果S4学生想要退选一门课C3 此时删掉这门课就意味着会删掉整条记录,如果此时S4学生只选过这门C3课也就意味着 S4的其他信息将彻底消失,造成删除异常。

修改复杂
如果某个学生从数学系转到计算机科学系,本来只需修改Sdept但是现在还得跟着修改Sloc,如果存在多个地方,则需要修改多次,造成修改复杂。

1NF->规范化->2NF

在这里插入图片描述
关系模式S-L-C规范化为关系模式SC和S-L
SC的码为(Sno,Cno)S-L的码为Sno。这样就使得非主属性对码都是完全函数依赖。

分析

关系模式SC没有传递依赖但是在S-L中 Sno->Sdept Sdept->Sloc
存在传递函数依赖所以不满足3NF规范

2NF->规范化->3NF

将S-L再分解为S-D(Sno,Sdept)D-L(Sdept,Sloc)

总结

1NF->消除非主属性对码的部分函数依赖->2NF
2NF->消除非主属性对码的传递函数依赖->3NF

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值