
数据库技术及应用课程第5章关系数据理论与模式求精.docx
8页第5章关系数据理论与模式求精[例5.1〕考虑学生选课关系模式SCE(studentNo,studentName,courseNo,courseName,score),属性集[studentNo,courseNo}是唯?候选码,也是主码如果允许?名学生选修多门课程,且一门课程可被多名学生选修,则该关系实例可能出现数据冗余,如图5-1所示studentNoStudentNamecourseNocourseNamescoreS0700001李小勇C001高等数学98S0700001李小勇C002离散数学82S0700001李小勇C006数据库系统原理56S0700002刘方晨C003计算机原理69S0700002刘方忌C004Ci羽言程序设计87S0700002刘方晨C005数据结构77S0700002刘方晨C007操作系统90SO7OOOO3王红敏C001高等数学46SO7OOOO3王红敏C002离散数学38SO7OOOO3王红敏C007操作系统50国5-1学生选i果关系SCE实例这种冗余会带来下列不好结果冗余存储:学生姓名和课程名被重复存储多次更新异常:当修改某学生的姓名或某课程的课程名时,可能只修改了部分副本的信息,而其他副本未彼修改到。
插入异常:如果某学生没有选修课程,或某门课程未被任何学生选修时,则该学生或该课程信息不能存入数据库;否则,违背了实体完整性原则(主码值不能为空)删除异常:当一学生的所有选修课程信息都被删除时,则该学生的信息将被丢失同样,当删除某门课程的全部学生选修信息时,该课程的信息也将被丢失关系模式SCE之所以会产生上述问题,是由于该模式中某些属性之间存在依赖关系,导致数据兀余而引起的在SCE中,存在的属性依赖关系有:studentNo决定studentName,courseNo决定courseName,[studentNo,courseNo}共同决定score.女口果将SCE分解为S(studentNo,studentName)、C(courseNo,courseName)和E(studentNo,courseNo,score)三个关系模式,贝USCE中原有的三种属性依赖关系就分别分解到每个单独的关系模式中去了,这样就不会再出现上述异常现象,且数据冗余也得到了有效控制[例5.2]设联系模式STU(studentNo,studentName,sex,birthday,native,classNo).其中studentNo为主码。
假设将STU分解为以下两个/模式:STU1(studentNo,studentName)STU2(studentName,sex,birthday,native,classNo)STU实体时,考虑到可该分解存在的缺陷之?是可能导致信息损失我们知道,在设计能存在同名的学生,故将studentNo属性作为STU的主码,以唯?标识STU中的每个学生实例假设STU中有以下两个元组:(S0700005,王红,男,1992-4-26,江西省南昌市,CS0702)(S0800005,王红,女〉1995-&10,湖北省武汉市,CP0802)如图5-2所示,首先将STU模式下的这两个元组分解为STUKSTU2模式下的元组:然后利用自然连接,试图根据分解后的元组还原原来的元组结果显示,还原后除了得到原来的两个元组外,还多出了两个新元组衣面上看得到了更多的元组,但实际上得到的信息却变少了,因为无法区分哪个信息是属于哪个王红的?显然,这种分解不是我们所希望看到的,称之为有损分解(lossydecomposition)v>反之,如果能够通过连接分解后所得到的较小关系完全还原被分解关系的所有实例,则称之为无损分解(losslessdecomposition),也称该分解具有无损连接特性。
studentNostudnetNamestudnetNamesexbirthdaynativeclassNoSO7OOOO5王红王红男1992-4-26江西省南昌市CS0702SO8OOOO5王红王红女1995-8-10湖北省钱汉市CP0802studentNostudnetNamesexbirthdaynativeclassNoS0700005王红男1992-4-26江西省南昌市CS0702S0800005王红女1995-8-10湖北省武汉市CP0802studentNostudnetNameSexbirthdaynativeclassNoS0700005王红男1992-4-26江西省南昌市CS0702S0700005王红女1995-8-10湖北省直汉市CP0802SO8OOOO5王红男1992-4-26江西省南昌市CS0702SO8OOOO5王红女1995-8-10湖北省犹汉市CP0802图5-2有损分解举例上述分解的另一缺陷是部分属性之间的依赖关系已丢失在STU中,属性studentNo是主码,可决定其中的全部属性但是将关系模式STU分解为STU1、STU2后,由于属性sex、birthday、age、native.classNo等与属性studentNo分属于不同的关系模式中,那么这些属性对studentNo的依赖关系也就不再存在。
也就是说,这种分解不是保持依赖(dependencypreserving)的分解而我们希望看到的是,被分解关系模式上的所有依赖关系都应该在分解得到的关系模式上保留5?2函数依赖定义仁15.7]r(R)=r(A,B,C,G,H,I),F=(A-:B,A-;C,CG-:H,CG-:I,B-:H},计算(AG几算法第一次循环的执行步骤如下,结果为closure=ABCGHL步骤FDclosure|?初值AG2?ArBABG3.A-CABCG4?CG>HABCGH5?CG-:IABCGHI6?B>HABCGHI算法第二次循环后的结果为closure=ABCGHI,没有变化,算法终上因此,(AG)+=ABCGHL细心的读者可能会发现,上例中的算法实际在完成第一次循环的步骤5后即可终止,因为closure已包含R的全部属性请读者自己完成上述算法的改进计算属性集闭包的作用可归纳如下:(1) 验证「…/是否在F中:看是否有『二2) 判断:?是否为r(R)的超码:通过计算:S看其是否包含R的所有属性例如,(AG)+=ABCGHL贝UAG为「(R)的超码判断:?是否为r(R)的候选码:若:?是超码,可检验:?包含的所有集的闭包是否包含R的所有属性。
若不存在任何这样的属性子集,则:?是r(R)的候选码3) 计算F+:对于任意?LR,可通过找出于,对任意的E于,可输出一个匚>5[例5.10]给定关系模式r(R)=r(A,B,C,D,E),函数依赖集F={A>B,BC>E,ED-;A},找出r(R)的所有候选码1) 属性集CD没有在函数依赖的右部出现,故X=CD为候选码的一部分:(2) I大](CD『=CD帜,故CD不是候选码;由于没有在函数依赖右部出现但左部不出现的属性,故Y=_;在属性集R-X-Y=ABE中寻找与X联合起来构成候选码的属性(集):({A,CD})+=ACDBE=R.故ACD为候选码;({B,CD})+=BCDEA=R,故BCD为候选码:({E,CD})*=ACDBE=R,故ECD为候选码因此,关系模式r(R)的候选码有ACD、BCD和ECD5.3.3正则遗盖[例5.13]考虑关系模式r(R)=r(A,B,C)和函数依赖集F={A~BC,BC,B,ABTC},计算F的正则覆盖FC第1步,合并函数依赖:将ATBC和ATB合并为ATBC5F'=ATBC,BtC,ABtC}c第2步,去除无关属性:对于ABTC,根据图5-9(a)的算法可检测A是无关的。
因此,去除无关属性A后,ABAC变为BTC,而BTC已在F冲存在,贝UF'=BTC,ATBC}对于BTC,由于其左右两边都为单属性,故不存在无关属性对于ATBC,根据图5?9(b)的算法可检测C是无关的因此,去除无关属性C后,ATBC变为ATB,贝UF=BTC,ATB}CFc=(BTC,ATB}F中的函数依赖左半部都是唯-的,且都不存在无关属性,因此对于正则覆盖,需做如下说明:(1) 可以证明Fc与F具有相同的闭包;Fc不包含无关属性,每个依赖是最小的,且是必要的;正则覆盖不-定唯5.3.4无损连接分解[例5.25]r(R)=r(A,B,C,D,G,H),F=(ABC,DGH,DA},判断关系模式r(R)是否属于BCNF范式?如果不是,则进行BCNF分解因为DG为关系r(R)的候选码,则ATBC的决定属性A不是超码,因此r(R).「BCNF,,按BCNF分解算法,关系r(R)可分解为:步骤1.根据函数依赖ATBC,分解关系r(R)为ri(Ri)=ri(A,B,C),Fi={ATBC}-一A是候选码,n(ROBCNFr2(R2)=R(A,D,G,H),F2={DGth,DtA]——DG是候选码步骤2.因为Dta的决定属性D不是关系「2侃2)的超码,即r2(R2pBCNFa同理,根据函数依赖DTA,分解关系「2代)为「力侃勿=「2i(D,A),F2i={DTA}——D是候选码,「2i(R2i)BCNF「22(R22)=「22(D,G,H),F22={DGTH}DG是巾矣选码,r22(R22)WBCNF最后,分解后得到的关系ri(A,B,C)、m(D,A)和「22(D,G,H)都属于BCNF。
[例5.26]r(R)=r(A,B,C,D,G,H),F={ABtGH,CDtGH,BTa,DtB},判断关系模式r(R)是否属于BCNF范式?如果不是,则进行BCNF分解因为CD为关系r(R)的候选码,则ABTGH的决定属性AB不是超码,因此r(R).「BCNF按BCNF分解算法,关系r(R)可分解为:步骤i.根据函数依赖ABTGH,分解关系r(R)为n(Ri)=n(A,B,G,H),Fi={ABtGH]——AB是候选码,n(Ri)BCNFr2(R2)=R(A,B,C,D),Fz={Bta,DtB]—CD是候选码,丢失函数依赖CDtGH步骤2.1大]为BTA的决定属性B不是关系%R”的超码,即「2(R2pBCNF同理,根据函数依赖BTA,分解关系辽(巳)为r2i(R2i)=r2i(B,A),Fm={BtA}-一B是候选码,rzifRzi)BCNF「22侃22)=「22(B,C,D),F22={DTB}一一CD是候选码步骤3.因为DTB的决定属性D不是关系「22他2)的超码,即「22(R22)yBCNF同理,根据函数依赖DTB,分解关系「22但22)为也险)=「22心,B),F22i={DTB}D是候选码,r22.(R?2i>BCNFr222(R222)=F222(C,D),F222={::'}?--CD是候选码,「222侃222),BCNF最后,分解后得到的关系r>(A,B,G,H)、烟但,A)、、2m(D,B)和「222(6D)都属于BCNF。
5.5.23NF分解算法[例5.27]r(R。
