第7章关系数据库设计理论7.1学习要点关系数据库设计理论是关系数据库的又一个重点。关系数据库的逻辑设计主要是设计关系模式,而深入了解函数依赖和码的概念则是设计和分解关系模式的基础。学习本章的目的有两个。一个是理论方面的,本章用更加形式化的关系数据理论来描述和研究关系模型。另一个是实践方面的,关系数据库设计理论是我们进行数据库设计的有力工具。1、知道什么是函数依赖、完全函数依赖、部分函数依赖和传递函数依赖,能确定两个或多个属性间的函数依赖,计算属性的闭集;2、理解关系的码和超码、主属性和非主属性;3、理解1NF、2NF、3NF和BCNF的定义,并能辨别某关系属于哪种范式类型;4、掌握规范化一个关系模式的原则方法,能够将某1NF关系规范化为3NF或BCNF;5、理解多值依赖和连接依赖,初步掌握分解成第四范式的方法。7.2习题讲解1.理解并给出下列名词的涵义:函数依赖、部分函数依赖、传递函数依赖、超码、多值依赖。答:函数依赖是数据库中两个属性集之间的约束。设R(U)是属性集U上的关系模式,X、Y是U的子集,r是R的任一具体关系。设t1、t2是关系r中的任意两个元组,如果t1[X]=t2[X],有t1[Y]=t2[Y],则称X函数决定Y,或Y函数依赖于X,记作X→Y。在关系模式R(U)中,X,Y是U的子集,若X→Y,且存在X'X,使X'→Y,则称X→Y是部分函数依赖(partialfunctionaldependency),记作X→PY。在关系模式R(U)中,X,Y是U的子集,若X→Y,Y→Z,并且Y不函数依赖于X,则称Z传递函数依赖于X。包含候选码的属性或属性组称为超码(Superkey)。设有关系模式R(U),X、Y为U的子集,Z=U-XY,r是R的任一关系,如果r中存在两个元组t1、t2满足t1[X]=t2[X],则r中必然存在两个元组t3、t4,使得(1)t3[X]=t4[X]=t1[X]=t2[X](2)t3[Y]=t1[Y]且t4[Y]=t2[Y](3)t3[Z]=t2[Z]且t4[Z]=t1[Z]则称X→→Y是多值依赖(multivalueddependency,MVD),X多值决定Y。2.设有关系模式R(ABCDE),有函数依赖集F={AB,ABD,EAD,EC}和G={ABD,EAC},判断F和G是否等价。答:AG+=ABD,EG+=ABCDE,可知F中的函数依赖AB、ABD、EAD、EC都属于G+,所以FG+;AF+=ABD,EF+=ABCDE,可知G中的函数依赖ABD,EAC都属于F+,所以GF+。根据引理5.3,F与G等价。3.设有一关系模式R(ABCD),其函数依赖集F={A→BC,B→C,AB→C,AC→D},求F的最小依赖集Fmin。答:(1)首先用分解规则将F中所有的函数依赖的右部属性单一化。得F={A→B,A→C,B→C,AB→C,AC→D}。(2)去掉F中多余的依赖。具体做法是:从第一个函数依赖(假设为X→Y)开始,把它从F中去掉,求X+,若X+包含Y,则X→Y是多余的,要去掉;若X+不包含Y,则不能去掉X→Y。检查全部依赖后可得G。显然G符合最小函数依赖集定义5.6的条件(2)。这里,对于A→B,由于(A)+=ACD不包含B,所以不能去掉;而由于从F中去掉A→C后,A+=ABCD,包含了C,所以A→C是多余的,从F中去掉;接下去B→C不能去掉,而且AB→C明显多余,从F中去掉;(AC)+=ABC不包含D,所以AC→D不能去掉,最后得G={A→B,B→C,AC→D}。(3)去掉F2中的函数依赖左边的多余的属性。具体做法是:检查F中所有左边是非单属性的函数依赖,如XY→A,要判断Y是否为多余属性,只要在F中求X+,若X+包含A,则Y是多余属性,否则Y不是多余属性。该题G中AC→D的C属性多余,去掉后得到的函数依赖集Fmin={A→B,B→C,A→D}。4.设有关系模式R(ABCDE),其函数依赖F={ABC,CDE,BD,EA},试求(1)计算B+。(2)求R的所有码。答:(1)根据算法5.1,令X(0)=B在F中找出左边是B的子集的函数依赖,有B→D;X(1)=BD因为X(1)≠X(0),继续在F中找出左边是BD的子集的函数依赖,由于不存在这样的函数依赖,所以不必再计算下去了。结果为:B+=BD。(2)因为A+=ABCDE,E+=ABCDE,(BC)+=ABCDE,(CD)+=ABCDE,B+=BD,C+=C,D+=D,所以候选码为A、E、BC、CD。5.试验证上题4中的R的以下两个分解是否具有无损连接性:1={R1(ABC),R2(ADE)}2={R1(ABC),R2(CDE)}。答:对于1={R1(ABC),R2(ADE)},R1∩R2=A,R1–R2=BC,R2–R1=DE,根据A+=ABCDE知(R1∩R2)→(R1–R2)和(R1∩R2)→(R2–R1)都满足,根据定理5.4,分解具有无损连接性。对于2={R1(ABC),R2(CDE)},R1∩R2=C,R1–R2=AB,R2–R1=DE,根据C+=C知(R1∩R2)→(R1–R2)和(R1∩R2)→(R2–R1)都不满足,根据定理5.4,分解不具有无损连接性。6.设有关系模式R(ABCDEGHI),其函数依赖F={ABC,ADE,BGH,DI},试求(1)求R的所有码。(2)将R分解成2NF。(3)将R无损分解成3NF,并且具有保持依赖性。答:(1)因为A+=ADEI,B+=BGH,(AB)+=ABCDEGHI,A、B没有在函数依赖的右边出现,所以候选码为AB。(2)因为2NF要求每一个非主属性完全函数依赖于码,而AB为码,非主属性C完全函数依赖于码,非主属性DEGHI都部分依赖于码,所以将R分解为三个模式R1、R2和R3:R1(ABC);R2(ADEI);R3(BGH)。这样,R1中的非主属性C完全函数依赖于码AB;R2中的非主属性DEI完全函数依赖于码A;R3中的非主属性GH完全函数依赖于码B。因此,R1、R2和R3都满足2NF。(3)首先求出F的最小依赖集Fmin,即Fmin={ABC,ADE,BGH,DI}。根据算法5.3,得ρ={ABC,ADE,BGH,DI},由于R的码是AB,所以根据算法5.4可得,=ρ∪{AB}={ABC,ADE,BGH,DI,AB},由于ABABC,因此={ABC,ADE,BGH,DI},是R的同时具有无损连接性和依赖保持性的3NF分解。7.设有关系模式R(ABCD),其函数依赖F={AC,CA,BAC,DAC},试求(1)求R的所有码。(2)将R无损分解成BCNF。(3)将R无损分解3NF,并且具有保持依赖性。答:(1)因为(BD)+=ABCD,B、D没有在函数依赖的右边出现,所以候选码为BD。(2)根据算法5.5:初始化ρ={R};R的码是BD,因此A、C、B和D不是超码。首先由左边不包含码的非平凡函数依赖AC,从R中分出AC(A,C),得ρ={R1(ABD),AC(A,C)}。然后,R1的码是BD,因此B和D不是超码。由左边不包含码的非平凡函数依赖BAC,从R1中分出BA(B,A),得ρ={BA(B,A),BD(B,D),AC(A,C)}。BA、BD和AC都是BCNF,并且具有无损连接性。ρ不具有依赖保持性。另外,={DA(D,A),BD(B,D),AC(A,C)}也是具有无损连接性的分解,但同样不具有依赖保持性。(3)首先求出F的最小依赖集Fmin,即Fmin={AC,CA,BA,DA}。根据算法5.3,得ρ={AC,CA,BA,DA},由于R的码是BD,所以根据算法5.4可得,=ρ∪{BD}={AC,CA,BA,DA,BD},由于AC=CA,因此={AC,BA,DA,BD},是R的同时具有无损连接性和依赖保持性的3NF分解。另外ρ={AC,BC,DC,BD}也是R的同时具有无损连接性和依赖保持性的3NF分解。8.在1NF~BCNF范围内,指出下列关系模式是第几范式,并说明理由。(1)R(ABC),F={AB,BA,AC}。(2)R(ABC),F={AB,BA,CA}。(3)R(ABCD),F={BD,ABC}。(4)R(ABC),F={BC,ACB}。(5)R(ABCD),F={BD,DB,ABC}。(6)R(ABCDE),F={ABCE,EAB,CD}。答:(1)候选码为A、B,可知F中每个非平凡函数依赖的左边都包含码,所以RBCNF。(2)候选码为C,可知非主属性都完全函数依赖于码,但存在非主属性B传递函数依赖于码C,所以R2NF。(3)候选码为AB,可知非主属性D部分函数依赖于码,所以R1NF。(4)候选码为AB、AC,可知A、B、C都是主属性,不存在非主属性部分函数依赖或传递对函数依赖于码,另外非平凡函数依赖BC的左边不包含码,所以R3NF。(5)候选码为AB、AD,可知不存在非主属性C部分函数依赖或传递对函数依赖于码,另外非平凡函数依赖BD的左边不包含码,所以R3NF。(6)候选码为E、AB,可知非主属性都完全函数依赖于码,但存在非主属性D传递函数依赖于码,所以R2NF。9.设关系模式R(ABC)上有一多值依赖AB,已知R的当前关系存在三个元组,如图7.1所示,试问该关系中至少还应存在哪些元组才能满足多值依赖的要求。答:ABCa1b1c1a1b2c2a1b3c3图7.1R的当前关系根据多值依赖的定义,可知当前关系中还应该存在6个元组:(a1,b1,c2),(a1,b1,c3),(a1,b2,c1),(a1,b2,c3),(a1,b3,c1),(a1,b3,c2)。7.3自测题一、选择题1.设学生关系模式为:学生(学号,姓名,年龄,性别,成绩,专业),则该关系模式的主码是()。A.姓名B.学号,姓名C.学号D.学号,姓名,年龄2.设一关系模式为R(A,B,C,D,E)及函数依赖F={A→B,B→E,E→A,D→E},则关系模式的R候选码是()。A.ADB.CDC.EBD.EC3.下列有关范式的叙述中正确的是()。A.如果关系模式R∈1NF,且R中主属性完全函数依赖于主码,则R是2NFB.如果关系模式R∈3NF,X,Y∈U,若X→Y,则R是BCNFC.如果关系模式R∈BCNF,若X→→Y(Y∉X)是平凡的多值依赖,则R是4NFD.一个关系模式如果属于4NF,则一定属于BCNF;反之不成立4.给定关系模式SCP(Snum,Cnum,P),其中Snum表示学号,Cnum表示课程号,P表示名次。若每一名学生每门课程都有一定的名次,而每门课程每一名次只有一名学生,则以下叙述中错误的是()。A.(Snum,Cnum)和(Cnum,P)都可以作为候选码B.(Snum,Cnum)是唯一的候选码C.关系模式SCP既属于3NF也属于BCNFD.关系模式SCP没有非主属性5.消除多值依赖所引起的冗余是属于()。A.2NFB.3NFC.4NFD.BCNF6.下列叙述中正确的是()。A.3NF不能保持多值依赖B.4NF肯定能保持多值依赖C.BCNF可能保持函数依赖D.4NF不能保持函数依赖7.若关系模式R的函数依赖集F中的所有候选码都是决定因素,则R的最高范式是()。A.2NFB.3NFC.BCNFD.4NF8.关系模式R包含属性{A1,A2,A3,A4,A5},其中{A1,A2}为码,则下面说法正确的是()。A.{A1}或{A2}有可能单独成为R的码B.{A1,A2,A3}必然也是R的码C.R中绝不可能出现两个在A1,A2上取值完全相同的元组D.R的所有元组中,A1或者A2的值都是不能重复的9.设一关系模式为R(A,B,C)及函数依赖F={AB→C,BC→A,B→C},则下列说法()是正确的。A.R一定消除了插入和删除异常B.R属于BCNFC.R属于3NFD.R一定消除了冗余10.在关系模式R中,函数依赖X→Y的语义是()A.在R的任意两个关系