幽兰生空谷
--绝世独自开

软考高级架构师-数据库-范式

在学习此知识点之前,可以先学习函数依赖知识点

第一范式1NF:

关系中的每一个分量必须是一个不可分的数据项

实例:

用一个单一的关系模式学生来描述学校的教务系统:学生(学号,学生姓名,系号,系主任
姓名,课程号,成绩)

依赖关系

(学号一>学生姓名,学号->系名,系名->系主任姓名,(学号,课程号)一>成绩)

缺点:

会产生数据冗余

会导致插入、删除、修改异常

tps:如何找出候选键?

第一步:找出依赖中从未在右边出现的属性。必然是候选键之一。

比如:上面依赖关系中,学号、课程号,从未在右边出现过,暂定这两个为候选键

第二步:以第一步选出的候选键为基础,依次添加其他属性,判断是否可以推出其他所有属性,将无法推出的属性加入候选键,直至全部推出。

比如:上面依赖关系中,可以根据学号、课程号,推出学生的所有属性,那么(学号、课程号)就为一个候选键(组合候选键)

第二范式2NF:消除了’非主属性’对’主属性’的部分依赖

如果关系R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R属于2NF。通俗地说,2NF就是在1NF的基础上,表中的每一个非主属性不会依赖复合主键中的某一个列。按照定义,上面的学生表就不满足2NF,因为学号不能完全确定课程号和成绩(每个学生可以选多门课)。将学生表分解为:

学生(学号,学生姓名,系名,系主任)
选课(学号,课程号,成绩)。
每张表均属于2NF。

第三范式3NF:消除了’非主属性’对’主属性’的传递依赖

满足2NF的基础上,表中不存在非主属性对码的传递依赖。

继续上面的实例,学生关系模式就不属于3NF,因为学生无法直接决定系主任,是由学号一>系名,再由系名->系主任,因此存在非主属性对主属性的传递依赖,将学生表进一步分解为:

学生(学号,学生姓名,系名)
系(系名,系主任)
选课(学号,课程号,成绩)
每张表都属于3NF。

BC范式BCNF

BC范式BCNF,是指在第三范式的基础上进一步消除[主属性]对于码的部分函数依赖和传递依赖

通俗的来说,就是在每一种情况下,每一个依赖的左边决定因素都必然包含候选键,如下:

软考高级架构师 数据库范式

上图中,候选键有两种情况:组合键(S,T)或者(S,J),依赖集为{SJ一T,T一J],可知,STJ三个属性都是主属性,因此其达到了3NF无非主属性),然而,第二种情况,即(S,J)为候选键的时候,对于依赖T->J,T在这种情况不是候选键,即T-J的决定因素不包含任意候选码,因此上图不是BCNF。

要使上图关系模式转换为BCNF也很简单,只需要将依赖T->J变为TS->J即可,这样其左边决定因素就包含了候选键之一S。

ps:表里面只有一个主属性,并且还满足3NF,那么必然为BCNF

4NF

4NF所允许的非平凡的多值依赖实际上就是函数依赖,4NF就是消除表中的非平凡多值依赖关系。

赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《软考高级架构师-数据库-范式》
文章链接:https://www.itheibai.com/archives/1888
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。

评论 抢沙发

评论前必须登录!

 

送人玫瑰,手有余香!

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册