收藏 分享(赏)

10.CH5 关系数据理论及求精(2).ppt

上传人:dreamzhangning 文档编号:5752287 上传时间:2019-03-15 格式:PPT 页数:36 大小:520.50KB
下载 相关 举报
10.CH5 关系数据理论及求精(2).ppt_第1页
第1页 / 共36页
10.CH5 关系数据理论及求精(2).ppt_第2页
第2页 / 共36页
10.CH5 关系数据理论及求精(2).ppt_第3页
第3页 / 共36页
10.CH5 关系数据理论及求精(2).ppt_第4页
第4页 / 共36页
10.CH5 关系数据理论及求精(2).ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、目 录,范式,问题提出,函数依赖定义,函数依赖理论,数据库模式求精,模式分解算法,5.6,5.5,范式概述,基于函数依赖理论,关系模式可分成 第一范式(1NF) 第二范式(2NF) 第三范式(3NF) Boyce-Codd范式(BCNF) 这几种范式的要求一个比一个严格,它们之间的联系为BCNF3NF2NF1NF。即满足BCNF范式的关系一定满足3NF范式,满足3NF范式的关系一定满足2NF范式,满足2NF范式的关系一定满足1NF范式。,第一范式(1NF) 码,定义5.16 如果一关系模式r(R)的每个属性对应的域值都是不可分的(即原子的),则称r(R)属于第一范式,记为r(R)1NF。 第一

2、范式的目标是:将基本数据划分成称为实体集或表的逻辑单元,当设计好每个实体后,需要为其指定主码。,图5-10 非规范化的关系模式,图5-11 1NF规范化后的关系模式,第二范式(2NF) 全部码,定义5.17 设有一关系模式r(R),R。若包含在r(R)的某个候选码中(某个候选码中),则称为主属性,否则为非主属性。 在SCE关系中,属性集studentNo, courseNo是SCE的唯一候选码。因此,属性studentNo和courseNo为主属性,其余属性为非主属性。 定义5.18 如果一个关系模式r(R)1NF,且所有非主属性都完全函数依赖于r(R)的候选码,则称r(R)属于第二范式, 记

3、为r(R)2NF。 由于SCE中存在依赖关系studentNostudentName和courseNo courseName,即非主属性studentName和courseName(子集studentNostudentName )部分依赖于SCE的候选码,故SCE2NF。,第二范式(2NF) 全部码,第二范式的目标是:将只部分依赖于主码(即依赖于主码的部分属性)的数据移到其他表中。 也就是说,在满足第一范式的实体中,如果有复合主码(即多个属性共同构成主码),那么所有非主属性必须依赖于全部的主码,而不能只是依赖于部分的主码属性。 违背了2NF的模式,即存在非主属性对候选码的部分依赖,则可能导致例

4、5.1所述的数据冗余及异常问题。,第二范式(2NF) 全部码,对于非2NF范式的关系模式,可通过分解进行规范化,以消除部分依赖。如将关系模式SCE分解为关系模式S、C和E(三个表)。这样在每个关系模式中,所有非主属性对候选码都是完全函数依赖,因此都属于2NF范式。 2NF范式虽然消除了由于非主属性对主码的部分依赖所引起的冗余及各种异常,但并没有排除传递依赖。因此,还需要对其进一步规范化。,Boyce-Codd范式(BCNF),Ray Boyce(SQL的创建者之一)以及Edgar Codd 定义5.19 给定关系模式r(R)及函数依赖集F,若F+中的所有函数依赖 (R,R)至少满足下列条件之一

5、: 是平凡函数依赖(即); 是r(R)的一个超码(即+包含R的全部属性)。 即起决定作用的属性必须是超码!则称r(R)属于Boyce-Codd范式,记为r(R)BCNF。 换句话说,在关系模式r(R)中,如果F+中的每一个非平凡函数依赖的决定属性集都包含候选码,则r(R)BCNF。 特别说明:为确定r(R)是否满足BCNF范式,必须考虑F+而不是F中的每个依赖。,Boyce-Codd范式(BCNF),从函数依赖角度可得出,一个满足BCNF的关系模式必然满足下列结论: 所有非主属性都完全函数依赖于每个候选码; 所有主属性都完全函数依赖于每个不包含它的候选码; 没有任何属性完全函数依赖于非候选码的

6、任何一组属性。 BCNF范式排除了: 任何属性(包括主属性和非主属性)对候选码的部分依赖和传递依赖; 主属性之间的传递依赖。,Boyce-Codd范式判断举例,例5.13 r(R)=r(A, B, C),F=AB, BC。 r(R)的候选码为A,r(R)BCNF,因为函数依赖BC中的决定属性B不是超码。 例5.14 r(R)=r(A, B, C),F=ABC, CA。 r(R)的候选码为AB或BC,r(R)BCNF,因为CA的决定属性C不是超码。 例5.15 r(R)=r(A, B, C),F=ABC, BCA。 r(R)的候选码为AB或BC,r(R)BCNF,因为两个函数依赖中的决定属性AB

7、或BC都是r(R)的候选码。,Boyce-Codd范式存在问题,对于非BCNF范式的关系模式,可通过分解进行规范化,以消除部分依赖和传递依赖。 将例5.13中的r(R)分解为 r1(R1)=r1(A, B)、r2(R2) =r2(B, C) 或 r1(R1)=r1(A, B)、r2(R2) =r2(A, C) 显然,这两种分解得到的r1(R1)和r2(R2)都属于BCNF范式。 但是,后一种分解不是保持依赖分解(例5.12已分析)。 因此,满足BCNF范式要求的模式分解,可能不是保持依赖分解。,第三范式(3NF) 仅仅是码,定义5.20 给定关系模式r(R)及函数依赖集F,若对F+中的所有函数

8、依赖 (R, R)至少满足下列条件之一: 是平凡函数依赖(即); 是r(R)的一个超码(即+包含R的全部属性); -中的每个属性是r(R)的候选码的一部分。则称r(R)属于第三范式,记为 r(R)3NF。 3NF与BCNF范式的区别在于第3个条件。 放松之处:允许存在主属性对候选码的传递依赖和部分依赖。 注意:3NF的第3个条件不要求 -中的每个属性必须包含在r(R)的一个候选码中,即中的每个属性可以包含在r(R)的不同候选码中。,第三范式(3NF) 仅仅是码,第三范式的目标是:去掉表中不依赖于主码的数据。 也就是说,在满足第二范式的实体中,非主属性不能依赖于另一个非主属性,即所有的非主属性应

9、该直接依赖于全部的主属性(即必须完全依赖,这是2NF的要求),并且彼此之间无相互依赖关系(即不能存在部分依赖,这是3NF的要求)。 换一句话说,非主属性不能包括它们自己的属性,如果属性不包括属性,则它们就是真正的实体。,3NF范式判断举例,例5.16 r(R)=r(A, B, C),F=AB, BC。 r(R)的候选码为A,r(R)3NF,且r(R)BCNF。 例5.17 r(R)=r(A, B, C),F=ABC, CA。 r(R)的候选码为AB或BC,r(R)3NF,但r(R)BCNF。 例5.18 r(R)=r(A, B, C),F=ABC, BCA。 r(R)的候选码为AB或BC,r(

10、R)3NF,且r(R)BCNF,属于BCNF的关系模式必定属于3NF,但属于3NF不一定属于BCNF!,3NF与BCNF比较,BCNF比3NF严格。 BCNF要求所有的非平凡函数依赖中的是超码,而3NF则放松了该约束,允许不是超码。 若关系模式属于BCNF范式就一定属于3NF范式。反之,则不一定成立。 3NF存在数据冗余和异常问题,而BCNF是基于函数依赖理论能够达到的最好关系模式。 BCNF范式分解是无损分解,但不一定是保持依赖分解;而3NF分解既是无损分解,又是保持依赖分解。,目 录,范式,问题提出,函数依赖定义,函数依赖理论,数据库模式求精,模式分解算法,5.6,5.5,模式分解算法,数

11、据库设计目标为(基于函数依赖): BCNF 无损连接 保持依赖 但有时不能同时达到这3个目标,就需根据实际应用需求在BCNF和3NF中做出选择。 主要模式分解算法BCNF分解3NF分解,BCNF分解方法,设即 r(R)为关系模式,r(R)BCNF,若非平凡函数依赖(即) 违反了BCNF的函数依赖,则将r(R)分解为r1(R1)和r2(R2),其中: R1= F1= 如果=,则是候选码 R2=R-(-) 如果=,则R2=R- 若r2(R2)不属于BCNF,则继续分解下去,直到所有结果模式都为BCNF。,BCNF分解举例,例5.19 r(R)=r(A, B, C),F=ABC, CA,判断r(R)

12、是否属于BCNF范式?如果不是,则进行BCNF分解。 例5.14已经证明r(R)BCNF(因为候选码为AB或BC,所以CA的决定属性C不是超码)。按上述算法,r(R)可分解为 r1(R1)=r1(A, C),F1=CA 该关系r1(R1)中,C是候选码 r2(R2)=r2(B, C),F2= 该关系r2(R2)中,BC是候选码 分解后的r1(R1)和r2(R2)都属于BCNF,不需再做分解。 注意:F中的函数依赖关系ABC ,在分解后丢失了!,BCNF分解算法,BCNF分解算法的形式化描述如下:,result := R; done := false; 计算 F+; while (not don

13、e) doif ri(Ri)BCNFif F+ ( ( Ri) (RiF+ =) )result := (result-Ri) (Ri-) (, )elsedone := true,图5-15 BCNF分解算法, 是Ri上的一个非平凡函数依赖, 不是Ri的超码,第一次循环时,ri(Ri)就是r(R),如果,则该属性集为Ri-(- ),BCNF分解举例,例1:r(R)=r(A, B, C, D, G, H),F=ABC, DGH , DA,r(R)是否属于BCNF范式?如果不是,则进行BCNF分解。 r(R)BCNF(因为候选码为DG ,所以ABC的决定属性A不是超码)。按上述算法,r(R)可分

14、解为 r1(R1)=r1(A, B, C), F1=ABC A是候选码 r2(R2)=r2(A, D, G, H),F2=DGH , DADG是候选码 r2(R2)BCNF(因为DA的决定属性D不是超码)。按上述算法,r2(R2)可分解为 r21(R21)=r21(D, A), F21=DA D是候选码 r22(R22)=r22(D, G, H), F22=DGH DG是候选码 最后,r1(A, B, C)、r21(D, A)和r22(D, G, H)都属于BCNF。,BCNF分解举例,例2:r(R)=r(A, B, C, D, G, H), F=ABGH, CDGH, BA, DB, r(R

15、)是否属于BCNF范式?如果不是,则进行BCNF分解。 r(R)BCNF,因为ABGH的决定属性AB不是超码。r(R)可分解为: r1(R1)=r1(A, B, G, H), F1=ABGH AB是候选码 r2(R2)=r2(A, B, C, D), F2=BA, DB D候选码, 丢失CDEF ! r2(R2)BCNF(BA的决定属性B不是超码)。r2(R2)可分解为: r21(R21)=r21(B, A), F21=BA B是候选码 r22(R22)=r22(B, C, D), F22=DB CD是候选码 r22(R22)BCNF(DB的决定属性D不是超码)。r22(R22)分解为: r2

16、21(R221)=r221(D, B), F221=DB D是候选码 r222(R222)=r222(C, D), F222= CD是候选码 最后,r1(A, B, G, H)、r21(B, A)、r221(D, B)和r222(C, D)都属于BCNF。,CD是候选码!,BCNF分解举例,例3:r(R)=r(A, B, C, D, G, H),F=ABGH, CDGH, DB,r(R)是否属于BCNF范式?如果不是,则进行BCNF分解。 r(R)BCNF,因为ABGH的决定属性AB不是超码。r(R)可分解为: r1(R1)=r1(A, B, G, H), F1=ABGH AB是候选码 r2(

17、R2)=r2(A, B, C, D), F2=DB ACD是候选码 丢失函数依赖CDGH! r2(R2)BCNF(DB的决定属性D不是超码)。r2(R2)可分解为: r21(R21)=r21(D, B), F21=DB D是候选码 r22(R22)=r22(A, C, D) , F22= ACD是候选码 最后,r1(A, B, G, H)、r21(D, B)和r22(A, C, D)都属于BCNF。,ACD是候选码!,BCNF分解算法,上述算法得到的分解不仅是BCNF分解,而且是无损分解(但可能不是保持函数依赖分解)。 算法中使用的函数依赖集是F+而不是F。 用该算法生成的BCNF分解不是唯一

18、的。,3NF分解算法,3NF分解算法形式化描述如下:,计算F的一个正则覆盖Fc; i:=0; for each Fc doif Rj, j=1,2,ii := i+1;Ri := ; if 没有任何Rj(j=1,2, i)包含r(R)的候选码i := i+1;Ri := r(R)的任一候选码; return (R1,R2, . , Ri),图5-16 3NF分解算法,3NF分解算法,对3NF分解算法做如下说明: 该算法能保证3NF分解是无损连接分解和保持依赖分解。 该算法是基于F的正则覆盖Fc中的函数依赖集进行的。 一方面正则覆盖可能有多个,另一方面算法执行的结果是依赖于Fc中函数依赖的考虑顺

19、序,因此分解结果可能不唯一。,3NF分解举例,例5.20 r(R)=r(A, B, C, D),F=ABCD, BC, ACB,判断r(R)是否属于3NF范式?并进行3NF分解。 AB和AC都为r(R)的候选码,故F中全部依赖都满足3NF定义中的条件,因此r(R)3NF。可根据3NF算法将r(R)分解成满足3NF范式的较小关系模式: 步骤1. 计算Fc:经检测知, ABCD中的C是右无关属性,去除后得Fc=ABD, BC, ACB。 步骤2. 根据上述三个函数依赖依次进行分解得: r1(R1)= r1(A, B, D), Fc1=ABD AB为候选码 r2(R2)= r2(B, C), Fc2

20、=BC B为候选码 r3(R3)= r3(A, C, B), Fc3=ACB AC为候选码 步骤3. 由于r(R)的候选码AB已被r1(R1)包含,或r(R)的候选码AC已被r3(R3)包含,故分解结束。 因此,r(R)的分解结果为r1(A, B, D)、r2(B, C)和r3(A, C, B)。,3NF分解举例,例1:r(R)=r(A, B, C, D, G, H),Fc=ABC, DGH, DA,判断r(R)是否属于3NF范式?如果不是,则进行3NF分解。 由于Fc中存在部分依赖和传递依赖,故r(R)不属于3NF。可根据3NF算法将r(R)分解成满足3NF范式的关系模式: 步骤1. 根据上

21、述三个函数依赖依次进行分解得: r1(R1)= r1(A, B, C), Fc1=ABC A为主码 r2(R2)= r2(D, G, H), Fc2=DGH DG为主码 r3(R3)= r3(D, A), Fc3=DA D为主码 步骤2. 由于r(R)的候选码DG已被r2(D, G, H)包含,故分解结束。 因此,r(R)的分解结果为r1(A, B, C)、r2(D, G, H)和r3(D, A)。,DG是候选码!,3NF分解举例,例2:r(R)=r(A, B, C, D, G, H), F=ABGH, CDGH, BA, DB, r(R)是否属于3NF范式?如果不是,则进行3NF分解。 计算

22、Fc: Fc=BAGH,DB ABGH中的A是左无关属性(因为在 F下有B+=ABGH),去掉无关属性A后:F=BGH, CDGH, BA, DB。 CDGH中的C是左无关属性(因为在 F下有D+=DBAGH),去掉无关属性C后:F=BGH,DGH,BA,DB DGH中的G是右无关属性(因为在 F下D+=DBAGH),去掉无关属性G后:F=BGH,DH,BA,DB 合并左边相同依赖后:F=BAGH,DBH DBH中的H是右无关属性(因为在 F下D+=DBAGH),去掉无关属性H后:Fc=BAGH,DB,CD是候选码!,r(R)3NF,因为存在部分和传递函数依赖。r(R)可分解为: r1(R1)

23、=r1(B, A, G, H), Fc1=BAGH B是候选码 r2(R2)=r2(D, B), Fc2=DB D是候选码,由于r(R)的候选码CD没有被r1或r2包含,故增加如下关系: r3(R3)=r3(C, D) CD是候选码,最后,r1(B, A, G, H)、r2(D, B)和r3(C, D)都属于3NF。,3NF分解举例?,例3:r(R)=r(A, B, C, D, G, H), F = ABGH, CDGH, DB ,r(R)是否属于3NF范式?如果不是,则进行3NF分解。 计算Fc: Fc=F=ABGH, CDGH, DB F中没有无关属性,且所有依赖左边无相同属性 r(R)3

24、NF,因为存在部分函数依赖。r(R)可分解为: r1(R1)=r1(A, B, G, H), Fc1=ABGH AB是候选码 r2(R2)=r2(C, D, G, H), Fc2=CDGH CD是候选码 r3(R3)=r3(D, B), Fc3=DB D是候选码 由于r(R)的候选码ACD没有被r1或r2或r3包含,故增加如下关系: r4(R4)=r4(A, C, D) ACD是候选码 最后,r1(A, B, G, H)、r2(C, D, G, H)、r3(D, B)和r4(A, C, D)都属于3NF 问题:G、H冗余了!,ACD是候选码!,目 录,范式,问题提出,函数依赖定义,函数依赖理论

25、,数据库模式求精,模式分解算法,5.6,5.5,模式求精的必要性,E-R图设计是一个复杂且主观的过程,并且有些约束关系并不能通过E-R图来表达的。一些不“好”的E-R设计可能忽略数据之间的约束关系而产生冗余,特别是在设计大型数据库模式时更可能发生。另外,关系模式除了由E-R图转换得到外,也可能由其他方式得到,如设计者的即席关系模式设计结果。因此,进一步对关系模式进行模式求精显得十分必要。 模式求精是运用关系理论(如函数依赖理论、多值依赖理论等)对已有关系模式进行结构调整、分解、合并和优化,以满足应用系统的功能及性能等需求。,模式求精步骤,基于函数依赖理论的模式求精步骤: 确定函数依赖。根据需求

26、分析得到的数据需求,确定关系模式内部各属性之间以及不同关系模式的属性之间存在的数据依赖关系。 确定关系模式所属范式。按照数据依赖关系对关系模式进行分析,检测是否存在部分依赖或传递依赖,以确定该模式属于第几范式。 分析是否满足应用需求。按照需求分析得到的数据处理要求,分析现有模式是否满足应用需求,并决定是否需要进行模式合并或分解。 模式分解。根据范式要求(是选择BCNF还是3NF),运用规范化方法将关系模式分解成所要求的关系模式。 模式合并。在分解过程中可能进行模式合并。如当查询经常涉及到多个关系模式的属性时,系统将经常进行连接操作,而连接运算的代价是相当高的。此时,可考虑将这几个关系合并为一个

27、关系。,即即,模式求精举例,例5.20 假设大学选课系统中课程与教师的关系模式可设计为: CourseTeacher (courseNo, courseName, creditHour, courseHour, teacherNo, teacherName, title, degree, teachLength)其中属性集courseNo, teacherNo是主码。试对该模式进行求精,以达到BCNF范式要求。 步骤1. 分析函数依赖关系及判断范式 通过分析关系模式CourseTeacher可知,存在以下函数依赖: courseNo courseName, creditHour, course

28、Hour teacherNo teacherName, title, degree, teachLength 显然,存在非主属性对主属性的部分依赖,故CourseTeacher不属于3NF范式,更不属于BCNF范式。,模式求精举例,步骤2. 模式分解 由于函数依赖“courseNo courseName, creditHour, courseHour”违背了BCNF条件,依BCNF分解算法,可将关系模式CourseTeacher分解为以下两个关系模式: Course (courseNo, courseName, creditHour, courseHour); Teaching (course

29、No, teacherNo, teacherName, title, degree, teachLength) 可验证关系模式Course已满足BCNF要求,且分解是无损分解(因为公共属性courseNo是Course的主码)。而在关系模式Teaching中,由于存在部分函数依赖“teacherNo teacherName, title, degree, teachLength”,因此可以进一步分解为: Teacher (teacherNo, teacherName, title, degree, teachLength) NewTeaching (courseNo, teacherNo) 可

30、验证关系模式Teacher和NewTeaching都已满足BCNF要求,且分解是无损分解(因为公共属性teacherNo是Teacher的主码)。,模式求精举例,综合上述分解结果,关系模式CourseTeacher可以分解为如下满足BCNF要求的三个关系模式: Course (courseNo, courseName, creditHour, courseHour) Teacher (teacherNo, teacherName, title, degree, teachLength) NewTeaching (courseNo, teacherNo),模式求精是数据库设计过程中非常重要的一步,设计者应在关系数据理论的指导下检查和改进设计中存在的不足和缺陷,以保证最终的设计结果尽可能地满足应用需求。,本章结束!,请同学们对本章内容进行复习、总结!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报