关系数据库设计理论一函数依赖1.关系模式中的数据依赖一个关系模式应当是一个五元组。R(U,D,DOM,F)R是关系名;U是一组属性;D是属性组U中属性所来自的域;DOM是属性到域的映射;F是属性组U上的一组数据依赖关系的集合。属性间数据的依赖关系集合F实际上是描述关系的元组定义,限定组成关系的各个元组必须满足的完整性约束条件。在实际应用中,这些约束或者通过对属性的取值范围限定,或者通过属性间的相互关连反映出来。后者称为数据依赖,这是数据库模式设计的关键。•由于D和DOM对模式设计关系不大,因此我们把关系模式看作是一个三元组:•R〈U,F〉•当且仅当U上的一个关系r满足F时,r称为关系模式R〈U,F〉的一个关系。2.数据依赖对关系模式的影响•数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系。它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。现在人们已经提出了许多种类型的数据依赖,其中最重要一个数据依赖是:•函数依赖(FunctionalDependency简记为FD)•函数依赖(FunctionalDependency简记为FD)•函数依赖极为普遍地存在于现实生活中。•如学生关系,可有学号(SNO),姓名(SNAME),系名(SDEPT)等几个属性。•由于一个学号只对应一个学生,一个学生只在一个系学习。因而当“学号”值确定之后,姓名和该生所在系的值也就被唯一地确定了。•就象自变量x确定之后,相应的函数值f(x)也就唯一地确定了一样,我们说SNO函数决定SNAME和SDEPT,或者说SNAME,SDEPT函数依赖于SNO,记为∶•SNO→SNAME•SNO→SDEPT•对“学生”关系,可能的一些属性:学号(Sno),系(Sdept),系负责人(Mname),课程(Cname)和成绩(Grade)。•现实世界的已知事实告诉我们∶•(1)一个系有若干学生,但一个学生只属于一个系;•(2)一个系只有一名(正职)负责人;•(3)一个学生可选修多门课程,每门课程有若干学生选修;•(4)每个学生学习每一门课程有一个成绩;•我们就得到了一个描述学校的数据库模式S〈U,F〉:•U={Sno,Sdept,Mname,Cname,Grade}•F={Sno→Sdept,Sdept→Mname,(Sno,Cname)→Grade}这组函数依赖如图所示。•••••3.有关概念SnoCnameGradeSdeptMname•(1)函数依赖•定义设R(U)是属性集U上的关系模式。X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个属性在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X→Y。•·若X→Y,则X叫做决定因素(Determinant)。•·若X→Y,Y→X,则记作XY。•·若Y不函数依赖于X,则记作XY。•(2)平凡的函数依赖与非平凡的函数依赖•定义:在关系模式R(U)中,对U中的子集X,Y,如果X→Y,但YX,则称X→Y是非平凡的函数依赖。若YX,则称X→Y是平凡的函数依赖。•对于任一关系模式,平凡的函数依赖都是必然存在的。•(3)完全函数依赖与部分函数依赖•定义:在R(U)中,如果X→Y,并且对于X的任何一个真子集X',都有X'Y,则称Y对X完全函数依赖,记作:XY。•若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作XY。•(4)传递依赖•定义:在R(U)中,如果X→Y,Y→Z,且•(YX),YX,则称Z对X传递函数依赖。•在关系Std(Sno,Sdept,Mname)中,有•Sno→SdeptSdept→Mname•Mname传递依赖Sno。•fp•(5)码定义设K为R〈U,F〉中的属性或属性组合,若KU,则称K为R的一个候选码。若R中有多个候选码,则选定其中的一个作为主码。•在一个关系模式中,若一个属性或属性组K完全函数决定整个元组,则称K为该关系的一个侯选码。•包含在任何一个侯选码中的属性称为主属性,不包含在任何一个侯选码中的属性称为非主属性。f二范式•范式是满足一定函数依赖的关系模式的集合。目前主要有多种范式:第一范式、第二范式、第三范式、BC范式等。满足最低要求的的叫第一范式,简称1NF。在第一范式基础上进一步添加一些要求的为第二范式,简称2NF。其余依次类推。显然各种范式之间存在联系:1NF2NF3NFBCNF•••1.第一范式(1NF)•定义如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。•SLC(Sno,Sdept,Sloc,Cno,Grade)∈1NF•不满足1NF的数据库模式不能称为关系数据库。•Sloc为学生住处,假设每个系的学生住在同一个地方。SLC的码为(Sno,Cno)。函数依赖包括:•(Sno,Cno)GradeSno→Sdept•(Sno,Cno)SdeptSno→Sloc•(Sno,Cno)SlocSdept→Sloc•满足1NF的数据库并一定是一个好的关系模式。例如,SLC关系存在问题:•(1)插入异常:插入一未选课的学生时,SnoSdeptSlocCnoGrade95102ISN?码值未定。无法插入。(2)删除异常:95022只选修了3号课程。现在他连3课程也不选修了。删除3号课程将删除95022的所有信息。(3)数据冗余大:SnoSdeptSlocCnoGrade95022ISN3SnoSdeptSlocCnoGrade95022ISN195022ISN295022ISN395022ISN495022ISN595022ISN6•2.第二范式(2NF)•定义若R∈lNF,且每一个非主属性完全函数依赖于码,则R∈2NF。•SLC不是2NF。将SLC分解为两个关系模式:•SC(Sno,Cno,Grade)•SL(Sno,Sdept,Sloc)•SC的码为(Sno,Cno),SL的码Sno。非主属性Grade、Sdept和Sloc完全函数依赖于码,即SC∈2NF、SL∈2NF。•此时,可在SL关系中插入尚未选课的学生;删除SC中一个学生的选课记录不会涉及的SL中该学生的记录;不论一个学生选修多少门课程,他的Sdept和Sloc信息只存储一次。•2NF的SL(Sno,Sdept,Sloc)仍存在问题:•(1)插入异常:如果某个系刚成立,目前没有在校学生,则无法插入这个系的信息。•(2)删除异常:如果某个系的学生全毕业了,删除学生的同时,将系的信息也删掉了。•(3)数据冗余大:每个系的学生住在同一个地方,关于系的住处的信息被重复存放。•问题所在:•SL中的Sloc传递函数依赖Sno。•3.第三范式(3NF)•定义关系模式R〈U,F〉中若不存在侯选码X、属性Y及非主属性Z(YX),使得X→Y,Y→Z和(YX)成立,则R∈3NF。•上述定义说明,若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。•关系模式SC(Sno,Sname,Sloc)中:•Sno→SlocSno→Sname•因此,SC∈3NF。•关系模式SL(Sno,Sdept,Sloc)中,Sloc传递地依赖Sno•因此,SL3NF(但SL∈2NF)••解决办法是将SL分解为:•SD(Sno,Sdept)•DL(Sdept,Sloc)•分解后的关系模式SD与DL中不存在传递依赖。•刚成立的系,没有在校学生,其信息可直接插入DL;如果某个系的学生全毕业了,删除SD中学生信息,系的信息仍然存在在DL中;一个系的学生住在同一个地方,系和其住处的信息只存储一次,较好的控制了冗余。•4.BCNF范式•定义:如果关系模式R是第一范式,且每个属性都不传递依赖于R的候选码,那么称R是BCNF的模式。从BCNF的定义可明显地得出如下结论:•(1)所有非主属性对码是完全函数依赖。•(2)所有主属性对不包含它的码是完全函数依赖。•(3)没有属性完全函数依赖于非码的任何属性组•通常认为BCNF是修正的第三范式,它比3NF又进一步,就是如果在第三范式中,若每一个决定因素都包含码,则该关系就是BCNF。三关系模式的规范化•一个关系只要其分量都是不可分的数据项,它就是规范化的关系,但这是最基本的规范化。规范化程度有多个级别,一个低一级范式的关系模式,通过分解可以转换为若干高一级范式的关系模式集合,这种过程就叫关系模式的规范化。•1.关系模式规范化的步骤•规范化程度过低的关系可能会存在插入异常、删除异常、修改复杂和数据冗余等问题,需要对其进行规范化,转换成高级范式。但在现实世界中,设计数据库模式结构时,应对用户需要做进一步的分析,确定一个合适的模式。•2.关系模式的分解•关系模式的分解必须保证分解后的关系模式与原关系模式等价。•设关系模式R〈U,F〉被分解为若干关系模式•R1〈U1,F1〉、R2〈U2,F2〉,…,Rn〈Un,Fn〉•若R与R1,R2,。。。,Rn的自然连接的结果相等,则称关系R的这个分解具有无损连接性。•具有无损连接性的分解才能保证不丢失信息。•例如:关系模式SL(Sno,Sdept,Sloc)存在以下依赖关系:Sno→Sdept,Sdept→Sloc,Sno→Sloc•假设,SL的一个关系为•第一种分解:SN(Sno)SD(Sdept)SO(Sloc)分解后的数据库丢失了许多信息。如,无法查询95001学生的所在系或所在宿舍等。第二种分解:NL(Sno,Sloc)DL(Sdept,Sloc)NL和DL的自然连接的结果为:•自然连接比原来的SL关系多了两个元组。•第三种分解:ND(Sno,Sdept)NL(Sno,Sloc)。第四种分解:ND(Sno,Sdept)DL(Sdept,Sloc)。NL和DL的自然连接的结果与SL关系完全一样,没有丢失信息。学生转系时,只需修改ND中的Sdept属性。