您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 第5章关系模式规范化设计
第5章关系模式的规范化设计冯万利主要内容※问题提出※函数依赖※关系模式的分解※关系模式的范式本章重要概念※(1)关系模式的冗余和异常问题。※(2)FD的定义、逻辑蕴涵、闭包、推理规则、与关键码的联系;平凡的FD;属性集的闭包;推理规则的正确性和完备性;FD集的等价;最小依赖集。※(3)无损分解的定义、性质、测试;保持依赖集的分解。※(4)关系模式的范式:1NF,2NF,3NF,BCNF。分解成2NF、3NF模式集的算法。前言※关系数据库的规范化设计是指面对一个现实问题,如何选择一个比较好的关系模式集合,即应该构造几个关系模式,每个关系由哪些属性组成。※规范化设计理论主要包括三个方面的内容:数据依赖(核心的作用)范式模式设计方法※数据依赖研究数据之间的联系,范式是关系模式的标准,模式设计方法是自动化设计的基础。规范化设计理论对关系数据库结构的设计起着重要的作用。※例4.1设有一个关系模式R(TNAME,ADDRESS,CNO,CNAME),其属性分别表示教师姓名、教师地址、任教课程的编号和课程名。TNAMEADDRESSCNOCNAMEt1a1c1n1t1a1c2n2t1a1c3n3t2a2c4n4t2a2c5n2t3a3c6n4关系模式R的实例在数据库设计中,如果一个关系模式设计得不好,就会出现像文件系统一样的数据冗余、异常、不一致等问题。关系模式的冗余和异常问题(1)关系模式的冗余和异常问题(2)该模式出现的问题有:※(1)数据冗余:如果一个教师教几门课程,那么这个教师的地址就要重复几次存储。※(2)操作异常:由于数据的冗余,在对数据操作时会引起各种异常:①修改异常。例如教师t1教三门课程,在关系中就会有三个元组。如果他的地址变了,这三个元组中的地址都要改变。若有一个元组中的地址未更改,就会造成这个教师的地址不惟一,产生不一致现象。②插入异常。如果一个教师刚调来,尚未分派教学任务,那么要将教师的姓名和地址存储到关系中去时,在属性CNO和CNAME上就没有值(空值)。在数据库技术中空值的语义是非常复杂的,对带空值元组的检索和操作也十分麻烦。③删除异常。如果在图4.1中要取消教师t3的教学任务,那么就要把这个教师的元组删去,同时也把t3的地址信息从表中删去了。这是一种不合适的现象。关系模式的冗余和异常问题(3)TNAMEADDRESSTNAMECNOCNAMEt1a1t1c1n1t2a2t1c2n2t3a3t1c3n3t2c4n4t2c5n2t3c6n4可以说,关系模式R不是一个好的模式。一个“好”的模式应当不会发生插入异常、删除异常、更新异常,数据冗余应尽量少。规范化原则:“关系模式有操作异常或冗余问题,就分解它。”图4.2关系模式分解的实例(a)关系模式R1的实例(b)关系模式R2的实例是否算最佳分解?那末,什么样的关系模式是最优的?标准是什么?如何实现?本章的符号约定一般地,我们设计关系数据库模式时,要注意三方面的问题:⑴必须从语义上摸清这些数据联系(实体联系和属性联系)。⑵尽可能的将互相依赖密切的属性构成单独模式。⑶切忌把依赖关系不密切、特别是具有“排它”性的属性硬凑到一起。※英文字母表首部的大写字母“A,B,C,D,…”表示单个属性。※英文字母表尾部的大写字母“…,U,V,W,X,Y,Z”表示属性集。※大写字母R表示关系模式,小写字母r表示其关系。※属性集{A1,A2,…,An}简记为A1A2…An。※属性集X和Y的并集X∪Y简记为XY。X∪{A}简写为XA或AX。5.2函数依赖主要内容※函数依赖的定义※FD的逻辑蕴含※FD的推理规则※FD和关键码的联系※属性集的闭包※FD集的最小依赖集函数依赖的定义(1)※函数依赖是属性间基本的一种依赖,它是关键码概念的推广。※定义5.1设有关系模式R(U),X和Y是属性集U的子集,若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖(FunctionalDependency,简记为FD)于X,记作X→Y。函数依赖的定义※FD是对关系模式R的一切可能的关系r定义的。对于r的任意两个元组,如果X值相同,则要求Y值也相同,即对一个X值有唯一个Y值与之对应。该定义类似于数学中的单值函数定义。ABCDABCDa1b1c1d1a1b1c1d1a1b1c2d2a1b2c2d2a2b2c3d3a2b2c3d3a3b1c4d4a3b2c4d4在图中,左边图有:A→B右边图没有:A→B函数依赖只能根据语义来确定。如姓名→年龄只有在该部门没有同名人的条件下是函数依赖。函数依赖的定义(2)注意:函数依赖不是指关系R的某个或某些关系满足的约束条件,而是指R的一切关系均要满足的约束条件。例5.2有一个关于学生选课、教师任课的关系模式:R(SNO,SNAME,CNO,GRADE,CNAME,TNAME,TAGE)属性分别表示学生学号、姓名、选修课程的课程号、成绩、课程名、任课教师姓名和年龄等意义。如果规定,每个学号只能有一个学生姓名,每个课程号只能决定一门课程,那么可写成下列FD形式:SNO→SNAMECNO→CNAME每个学生每学一门课程,有一个成绩,那么可写出下列FD:(SNO,CNO)→GRADE还可以写出其他一些FD:CNO→CNAME,TNAME,TAGE)TNAME→TAGE函数依赖的定义(3)※对于函数依赖的定义注意以下三点:※⑴函数依赖是一个基于关系模式(不是一个关系模式的特定实例)的函数概念,即如果一个关系模式R中存在函数依赖X→Y,则要求该模式的所有具体关系都满足X→Y。※⑵函数依赖不取决于属性构成关系的方式(即关系结构),而是关系所表达的信息本身的语义特性,我们只能根据这种语义信息确定函数依赖,没有其他途径。※⑶函数依赖是数据库设计者对于关系模式的一种断言或决策,即在设计关系型数据库时不仅要设计关系结构,而且要定义数据依赖的条件,限制进入关系的所有元组都必须符合所定义的条件,否则拒绝接受输入。FD的逻辑蕴涵※定义5.2设F是在关系模式R上成立的函数依赖的集合,X→Y是一个函数依赖。如果对于R的每个满足F的关系r也满足X→Y,那么称F逻辑蕴涵X→Y,记为F⊨X→Y。※定义5.3设F是函数依赖集,被F逻辑蕴涵的函数依赖全体构成的集合,称为函数依赖集F的闭包(closure),记为F+。即F+={X→Y|记为F⊨X→Y。}※说明:即使一个小的函数依赖集F,其闭包F+也是很大的,一般情况下总有。研究逻辑蕴涵的目的是利用推理的方法,从一组已知的函数依赖推导出另一组函数依赖,从而找出所有函数依赖F+。FF※从已知的一些FD,可以推导出另外一些FD,这就需要一系列的推理规则。※设U是关系模式R的属性集,F是R上成立的只涉及到U中属性的函数依赖集。FD的推理规则有以下三条:A1(自反性,Reflexivity):若YXU,则X→Y在R上成立。A2(增广性,Augmentation):若X→Y在R上成立,且ZU,则XZ→YZ在R上成立。A3(传递性,Transitivity):若X→Y和Y→Z在R上成立,则X→Z在R上成立。FD的推理规则(1)目的:是由F再通过这些FD推理规则找到F+FD的推理规则※结论FD推理规则A1、A2和A3是正确的。也就是,如果X→Y是从F用推理规则导出,那么X→Y在F+中。※FD的其他五条推理规则:※(1)A4(合并性,Union):{X→Y,X→Z}⊨X→YZ。※(2)A5(分解性,Decomposition):{X→Y,Z∈Y}⊨X→Z。※(3)A6(伪传递性):{X→Y,WY→Z}⊨WX→Z。※(4)A7(复合性,Composition):{X→Y,W→Z}⊨XW→YZ。※(5)A8(通用一致性):{X→Y,W→Z}⊨X∪(W-Y)→YZ。例5.3设有关系模式R,A、B、C、D、E、F是它的属性集的子集,R满足下列函数依赖:F={A→BC,CD→EF},证明:函数依赖AD→F成立。证明:A→BC(已知)A→C(分解性)AD→CD(增广性)CD→EF(已知)AD→EF(传递性)AD→F(分解性)FD的推理规则(2)FD和关键码的联系※定义5.4设关系模式R的属性集是U,X是U的一个子集。如果X→U在R上成立,那么称X是R的一个超键。如果X→U在R上成立,但对于X的任一真子集W,都有W→U不成立,那么称X是R上的一个候选键。候选键举例※例5.4在学生选课、教师任课的关系模式中:※R(SNO,SNAME,CNO,CNAME,GRADE,TNAME,TAGE)※如果规定:每个学生每学一门课只有一个成绩;每个学生只有一个姓名;每个课程号只有一个课程名;每门课程只有一个任课教师。※根据这些规则,可以知道(SNO,CNO)能函数决定R的全部属性,并且是一个候选键。虽然(SNO,SNAME,CNO,TNAME)也能函数决定R的全部属性,但相比之下,只能说是一个超键,而不能说是候选键,因为其中含有多余属性。※定义5.5设有关系模式R(U),U={A1,A2,…,An},X是U的子集,F是U上的一个函数依赖集,则称所有用Armstrong公理从F推出的函数依赖X→Ai(i=1,2,…,n)中Ai的集合为X的属性集闭包,记为。※即={Ai|Ai∈U,且X→Ai可用Armstrong公理从F推出}属性集的闭包FXFX属性集的闭包举例例5.5设关系模式R(ABC)的函数依赖集为F={A→B,B→C},分别求A、B、C的闭包。解:若X=AA→B,B→C(已知)A→C(传递性)A→A(自反性)={A,B,C}(据定义)若X=BB→B(自反性)B→C(已知)={B,C}(据定义)若X=C,C→C(自反性)={C}(据定义)FXFXFXFD集的最小依赖集(1)※如果关系模式R(U)上的两个函数依赖集F和G,有F+=G+,则称F和G是等价的函数依赖集。※函数依赖集F中的FD很多,应该从F中去掉平凡的FD、无关的FD,以求得F的最小依赖集Fmin。形式定义如下:※定义5.6设F是属性集U上的FD集,如果满足:⑴F中每一个函数依赖的右部都是单个属性;⑵对F中任一个函数依赖X→A,F-{X→A}都不与F等价;⑶对于F中的任一个函数依赖X→A和X的任一子集Z,{F-{X→A}}∪{Z→A}都不与F等价。※则称F是一个最小函数依赖集,记为Fmin。※上述三个条件的作用分别是:条件⑴保证了每个函数依赖的右部都不会有多个属性;条件⑵保证了F中没有多余的函数依赖;条件⑶保证了函数依赖的左部没有重复属性。FD集的最小依赖集(2)※算法4.2计算函数依赖集F的最小依赖集G的步骤:第一步:根据分解性推理规则,得到一个与F等价的FD集G,G中每个FD的右边均为单属性。第二步:在G的每个FD中消去左边冗余的属性。第三步:在G中消除冗余的FD。FD集的最小依赖集(3)例5.6设F是关系模式R(ABC)的FD集,F={A→BC,B→C,A→B,AB→C},试求Fmin。解:①先把F中的FD写成右边是单属性形式:F={A→B,A→C,B→C,A→B,AB→C}显然多多了一个A→B,可删去。得F={A→B,A→C,B→C,AB→C}②在F中,由A→B和B→C可以推出A→C,所以A→C是冗余的,可删去。得F={A→B,B→C,AB→C}③F中AB→C可从B→C推出,因此AB→C也可删去。最后得F={A→B,B→C},即为所求的Fmin。5.3关系模式的分解主要内容※模式分解问题※无损分解※保持函数依赖分解※对于存在数据冗余、插入异常、删除异常问题的关系模式,应采取将一个关系模式分解为多个关系模式的方法进行处理,但是这种分解过程必须是“可逆”的,即模式分解的结果应该能重新映像到分解前的关系模式。模式分解问题模式分解定义定义5.7F是关系模式R(U)的一个函数依赖集,记为R(F,U)。如果若干个关系模式的集合ρ={R1(U1,F1),R2(U2,F2),…,Rk(Uk,Fk)}其中:⑴/*关系模式R的属性
本文标题:第5章关系模式规范化设计
链接地址:https://www.777doc.com/doc-3800527 .html