龙空技术网

数据库系统原理:第三范式

万象星辰 28

前言:

此时我们对“数据库如何分解3nf算法”大约比较珍视,小伙伴们都需要知道一些“数据库如何分解3nf算法”的相关资讯。那么小编也在网摘上汇集了一些关于“数据库如何分解3nf算法””的相关文章,希望兄弟们能喜欢,你们快快来了解一下吧!

关系模式满足的约束条件称为范式,范式由低到高分为1NF、2NF、3NF、BCNF等。

学习什么是3NF。

一、第三范式(3NF)定义

给定关系模式R及其上的函数依赖集F,如果R的任何一个非主属性都不传递函数依赖于它的任何一个侯选码,则称R是第三范式,简记为3NF。(非主属性也不部分函数依赖于码)

定理:一个3NF的关系(模式)必定是2NF的(3NF2NF1NF)。

例1:已知CT (CNO, CNAME, TNAME, BDATE, SALARY) ,F= {CNO→TNAME, CNO→CNAME, TNAME→SALARYTNAME→ BDATE} ,判断R属于第几范式。

关系模式CT由课程号、课程名、教师名、教师的生日、教师的工资这五个属性组成,其中课程号是候选键。函数依赖集里面有四个函数依赖关系:课程号决定教师名(这就意味着一门课只有一名教师)、课程号决定课程名、教师名决定教师的工资、教师名决定教师的生日。

由于候选键是单属性,所以它一定是2NF。那么,能不能达到3NF,需要看有没有传递函数依赖。课程号决定教师名,而教师名决定教师的工资和生日,因此存在非主属性BDATE和SALARY传递函数依赖于码,故CT∈2NF,不是3NF。

可以去除传递函数依赖关系,将CT分解为:

CCNO, CNAME, TNAME),

TTNAME, BDATE, SALARY)均是3NF

在关系模式C中,候选键是课程号;在关系模式T中,候选键是教师名。在关系模式C和T中都没有传递函数依赖关系,因此都是满足3NF的定义。

二、3NF存在的问题

问题:分解为3NF后,是不是都不存在前述的四种异常(冗余,插入、删除、修改异常)?

例2 :R= {S(学生), T(教师), J(课程)} F={T→J,SJ→T,ST→J}

关系模式R中有S、T、J三个属性,函数依赖关系也是有三个:T决定J、SJ决定T,ST决定J。

例2的函数依赖关系图(FD图)

在函数依赖关系中,所有的属性都出现,只有S没有出现在函数依赖关系的右边,所以S一定包含在候选键中。S不能唯一确定其他两个属性,S和J一起才能决定T,S和T一起才能决定J。因此,候选码为:(S,T)和(S,J)。

由于有两个,而所有的属性都出现在候选键中,因此R中没有非主属性,就不满足1NF、2NF的条件了,就自动地判断出来关系模式R是3NF。(因为没有非主属性,所以不用寻找部分函数依赖和传递函数依赖。)

仍然存在以前的四种问题:

以例2为例,由于候选键中都有S(学生)的信息,因此要插入某个教师能讲授某门课的信息、而又没有学生选修该课时会有插入异常。

说明3NF虽然实现了一定程度的概念的分明,但是还是不够好。

三、总结

关系模式中存在不同程度的函数依赖关系,用范式来表示属性间依赖的程度,范式是评价关系模式好坏的标准。

关系模式满足的最低要求是1NF,如果消除了非主属性对侯选码的部分函数依赖,1NF就转化为2NF;若消除了非主属性对侯选码的传递函数依赖,2NF就转化为3NF。

规范化就是将低级范式的关系模式分解为高级范式的关系模式的过程。

标签: #数据库如何分解3nf算法