数据库技术及应用课程第5章 关系数据理论与模式求精

第5章关系数据理论与模式求精
[例5.1]考虑学生选课关系模式SCE(studentNo, studentName, courseNo, courseName, score),属性集{studentNo, courseNo}是唯一候选码,也是主码。如果允许一名学生选修多门课程,且一门课程可被多名学生选修,则该关系实例可能出现数据冗余,如图5-1所示。
图5-1 学生选课关系SCE实例
这种冗余会带来下列不好结果。
●冗余存储:学生姓名和课程名被重复存储多次。
●更新异常:当修改某学生的姓名或某课程的课程名时,可能只修改了部分副本的
信息,而其他副本未被修改到。
●插入异常:如果某学生没有选修课程,或某门课程未被任何学生选修时,则该学
生或该课程信息不能存入数据库;否则,违背了实体完整性原则(主码值不能为
空)。
●删除异常:当一学生的所有选修课程信息都被删除时,则该学生的信息将被丢失。
同样,当删除某门课程的全部学生选修信息时,该课程的信息也将被丢失。
关系模式SCE之所以会产生上述问题,是由于该模式中某些属性之间存在依赖关系,导致数据冗余而引起的。在SCE中,存在的属性依赖关系有:studentNo决定studentName, courseNo决定courseName, {studentNo, courseNo}共同决定score。
如果将SCE分解为S(studentNo, studentName)、C(courseNo, courseName)和  E (studentNo, courseNo, score)三个关系模式,则SCE中原有的三种属性依赖关系就分别分解到每个单独的关系模式中去了,这样就不会再出现上述异常现象,且数据冗余也得到了有效控制。
[例5.2]设一关系模式STU (studentNo, studentName, sex, birthday, native, classNo),其中studentNo为主码。假设将STU分解为以下两个子模式:
STU1 (studentNo, studentName)
STU2 (studentName, sex, birthday, native, classNo)
该分解存在的缺陷之一是可能导致信息损失。我们知道,在设计STU实体时,考虑到可
•119 •
能存在同名的学生,故将studentNo属性作为STU的主码,以唯一标识STU中的每个学生实例。假设STU中有以下两个元组:
(S0700005,王红,男,1992-4-26,江西省南昌市,CS0702)
(S0800005,王红,女,1995-8-10,湖北省武汉市,CP0802)
sr2m
如图5-2所示,首先将STU模式下的这两个元组分解为STU1、STU2模式下的元组;然后利用自然连接,试图根据分解后的元组还原原来的元组。结果显示,还原后除了得到原来的两个元组外,还多出
了两个新元组。表面上看得到了更多的元组,但实际上得到的信息却变少了,因为无法区分哪个信息是属于哪个王红的?显然,这种分解不是我们所希望看到的,称之为有损分解(lossy decomposition)。反之,如果能够通过连接分解后所得到的较小关系完全还原被分解关系的所有实例,则称之为无损分解(lossless decomposition),也称该分解具有无损连接特性。
图5-2 有损分解举例
上述分解的另一缺陷是部分属性之间的依赖关系已丢失。在STU中,属性studentNo 是主码,可决定其中的全部属性。但是将关系模式STU分解为STU1、STU2后,由于属性sex、birthday、age、native
、classNo等与属性studentNo分属于不同的关系模式中,那么这些属性对studentNo的依赖关系也就不再存在。也就是说,这种分解不是保持依赖(dependency preserving)的分解。而我们希望看到的是,被分解关系模式上的所有依赖关系都应该在分解得到的关系模式上保留。
5.2函数依赖定义
[例5.7]r(R)=r(A, B, C, G, H, I),F={A→B, A→C, CG→H, CG→I, B→H},计算(AG)+。
算法第一次循环的执行步骤如下, 结果为closure=ABCGHI。
步骤FD closure
1.初值AG
2.A→B ABG
3.A→C ABCG
•120 •
4.CG→H ABCGH
5.CG→I ABCGHI
6.B→H ABCGHI
算法第二次循环后的结果为closure=ABCGHI,没有变化,算法终止。因此,(AG)+=ABCGHI。
细心的读者可能会发现,上例中的算法实际在完成第一次循环的步骤5后即可终止,因为closure已包含R的全部属性。请读者自己完成上述算法的改进。
计算属性集闭包的作用可归纳如下:
(1) 验证α→β是否在F+中:看是否有β⊆α+。
(2) 判断α是否为r(R)的超码:通过计算α+,看其是否包含R的所有属性。例如,(AG)+=ABCGHI,则AG为r(R)的超码。
(3) 判断α是否为r(R)的候选码:若α是超码,可检验α包含的所有子集的闭包是否包含R的所有属性。若不存在任何这样的属性子集,则α是r(R)的候选码。
(4) 计算F+:对于任意γ⊆R,可通过出γ+,对任意的S⊆γ+,可输出一个γ→S。
[例  5.10]给定关系模式r(R)=r(A, B, C, D, E),函数依赖集F={A→B, BC→E, ED→A},出r(R)的所有候选码。
(1) 属性集CD没有在函数依赖的右部出现,故X=CD为候选码的一部分;
(2) 因(CD)+=CD≠R,故CD不是候选码;
(3) 由于没有在函数依赖右部出现但左部不出现的属性,故Y=∅;
(4) 在属性集R-X-Y=ABE中寻与X联合起来构成候选码的属性(集):
({A, CD})+=ACDBE=R,故ACD为候选码;
中国军力报告2013
({B, CD})+=BCDEA=R,故BCD为候选码;
({E, CD})+=ACDBE=R,故ECD为候选码。relex
因此,关系模式r(R)的候选码有ACD、BCD和ECD。
*5.3.3 正则覆盖
[例  5.13]考虑关系模式r(R)=r(A,B,C)和函数依赖集F={A→BC,B→C,A→B, AB→C}, 计算F的正则覆盖F c。
第1步,合并函数依赖:将A→BC和A→B合并为A→BC。F’={A→BC, B→C, AB→C}。
第2步,去除无关属性:对于AB→C,根据图5-9(a)的算法可检测A是无关的。因此,去除无关属性A后,AB→C变为B→C,而B→C已在F’中存在,则F’={B→C, A→BC}。
对于B→C,由于其左右两边都为单属性,故不存在无关属性。
对于A→BC,根据图5-9(b)的算法可检测C是无关的。因此,去除无关属性C后,A→BC 变为A→B,则F’={B→C, A→B}。
F’中的函数依赖左半部都是唯一的,且都不存在无关属性,因此F c={B→C, A→B}。
对于正则覆盖,需做如下说明:
(1) 可以证明F c与F具有相同的闭包;
(2) F c不包含无关属性,每个依赖是最小的,且是必要的;
•121 •
(3) 正则覆盖不一定唯一。
5.3.4 无损连接分解
[例5.25]r(R)=r(A, B, C, D, G, H),F={A→BC, DG→H , D→A},判断关系模式r(R)是否属于BCNF范式?如果不是,则进行BCNF分解。
因为DG为关系r(R)的候选码,则A→BC的决定属性A不是超码,因此r(R)∉BCNF。按BCNF分解算法,关系r(R)可分解为:
步骤1. 根据函数依赖A→BC,分解关系r(R)为
r1(R1)=r1(A, B, C),F1={A→BC} ——A是候选码,r1(R1)∈BCNF
r2(R2)=r2(A, D, G, H),F2={DG→H, D→A} ——DG是候选码
步骤2. 因为D→A的决定属性D不是关系r2(R2)的超码,即r2(R2)∉BCNF。同理,根据函数依赖D→A,分解关系r2(R2)为
r21(R21)=r21(D, A),F21={D→A} ——D是候选码,r21(R21)∈BCNF
r22(R22)=r22(D, G, H),F22={DG→H} ——DG是候选码,r22(R22)∈BCNF
最后,分解后得到的关系r1(A, B, C)、r21(D, A)和r22(D, G, H)都属于BCNF。
[例5.26]r(R)=r(A, B, C, D, G, H),F={AB→GH, CD→GH, B→A, D→B},判断关系模式r(R)是否属于BCNF范式?如果不是,则进行BCNF分解。
因为CD为关系r(R)的候选码,则AB→GH的决定属性AB不是超码,因此r(R)∉BCNF。按BCNF分解算法,关系r(R)可分解为:
步骤1. 根据函数依赖AB→GH,分解关系r(R)为
r1(R1)=r1(A, B, G, H),F1={AB→GH} ——AB是候选码,r1(R1)∈BCNF
r2(R2)=r2(A, B, C, D),F2={B→A, D→B} ——CD是候选码,丢失函数依赖CD→GH 步骤2. 因为B→A的决定属性B不是关系r2(R2)的超码,即r2(R2)∉BCNF。同理,根据函数依赖B→A,分解关系r2(R2)为
r21(R21)=r21(B, A),F21={B→A} ——B是候选码,r21(R21)∈BCNF
r22(R22)=r22(B, C, D),F22={D→B} ——CD是候选码
步骤3. 因为D→B的决定属性D不是关系r22(R22)的超码,即r22(R22)∉BCNF。同理,根据函数依赖D→B,分解关系r22(R22)为
r221(R221)=r221(D, B),F221={D→B} ——D是候选码,r221(R221)∈BCNF
r222(R222)=r222(C, D),F222={∅} ——CD是候选码,r222(R222)∈BCNF
最后,分解后得到的关系r1(A, B, G, H)、r21(B, A)、r221(D, B)和r222(C, D)都属于BCNF。*5.5.23NF分解算法
[例5.27]r(R)=r(A, B, C, D),F={AB→CD, B→C, AC→B},判断关系模式r(R)是否属于3NF范式,并进行3NF分解。
计算可知,AB和AC都为r(R)的候选码,故F中全部依赖都满足3NF定义中的条件,因此r(R)∈3NF。可根据3NF算法将r(R)分解成满足3NF范式的较小关系模式:
•122 •
步骤1. 计算F c:经检测知,AB→CD中的C是无关属性,去除后得F c={AB→D, B→C, AC→B}。
步骤2. 根据上述三个函数依赖依次进行分解得:
r1(R1)= r1(A, B, D)
r2(R2)= r2(B, C)
scer3(R3)= r3(A, B, C)
步骤3. 由于r(R)的候选码AB已被r1(R1)和r3(R3)包含,故分解结束。
因此,r(R)的分解结果为r1(A, B, D)、r2(B, C)和r3(A, B, C)。
好乐宝博客[例5.28]r(R)=r(A, B, C, D, G, H), F={AB→GH, CD→GH, B→A, D→B}, 判断关系模式r(R)是否属于3NF范式?如果不是,则进行3NF分解。
计算可知,CD是关系r(R)的候选码,因此关系r(R)中存在部分和传递函数依赖,故r(R)∉3NF。按3NF分解算法,分解关系r(R)的步骤为:
步骤1. 计算F c:
(1) 因为在F下有B+=ABGH,所以AB→GH中的A是左无关属性,去掉无关属性A 后,F={B→GH, CD
→GH, B→A, D→B};
(2) 因为在F下有D+=DBAGH,所以CD→GH中的C是左无关属性,去掉无关属性C后,F={B→GH,D→GH,B→A,D→B};
(3) 因为在F′下D+=DBAGH,所以D→GH中的G是右无关属性,去掉无关属性G 后,F={B→GH,D→H,B→A,D→B};
(4) 合并左边相同依赖后,F={B→AGH,D→BH};
(5) 因为在F′下D+=DBAGH,所以D→BH中的H是右无关属性,去掉无关属性H 后,最后得到F c={B→AGH,D→B}。
步骤2. 分解关系r(R):
r1(R1)=r1(B, A, G, H),F c1={B→AGH} ——B是候选码,r1(R1)∈3NF
r2(R2)=r2(D, B),F c2={D→B} ——D是候选码,r2(R2)∈3NFwem2009
步骤3. 由于r(R)的候选码CD没有被r1(R1)或r2(R2)包含,故增加如下关系:
r3(R3)=r3(C, D) ——CD是候选码,r3(R3)∈3NF
最后,分解后得到的关系r1(B, A, G, H)、r2(D, B)和r3(C, D)都属于3NF。
[例5.29]假设大学选课系统中课程与教师的关系模式可设计为:
CourseTeacher (courseNo, courseName, creditHour, courseHour,
teacherNo, teacherName, title, degree,teachNumber)
其中,属性集{courseNo, teacherNo}是主码,teachNumber的含义是讲授次数。试对该模式进行求精,以达到BCNF范式要求。
步骤1. 分析函数依赖关系及判断范式
通过分析关系模式CourseTeacher可知,存在以下函数依赖:
courseNo →{courseName, creditHour, courseHour};
teacherNo → {teacherName, title, degree};
{courseNo, teacherNo} → teachNumber。
显然,存在非主属性对主码的部分依赖,故CourseTeacher不属于3NF范式,更不属
•123 •

本文发布于:2024-09-24 16:31:15,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/720146.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:关系   属性   分解   依赖   模式   课程   函数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议