第9章 关系规范化理论_第1页
第9章 关系规范化理论_第2页
第9章 关系规范化理论_第3页
第9章 关系规范化理论_第4页
第9章 关系规范化理论_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库系统教程第9章关系规范化理论1第9章关系规范化理论9.1函数依赖9.2一些基本概念9.3范式9.4关系模式的分解准则*2关系数据库逻辑设计针对具体问题,如何构造一个适合于它的数据模式。数据库逻辑设计的工具──关系数据库的规范化理论。函数依赖范式模式设计方法关系模式的设计问题示例 考虑为管理职工的工资信息而设计一个关系模式职工级别工资钱广5600孙志6700李开5600周祥6700赵明4500关系模式的设计问题信息的不可表示问题插入异常:如果没有职工具有8级工资,则8级工资的工资数额就难以插入删除异常:如果仅有职工赵明具有4级工资,如果将赵明删除,则有关4级工资的工资数额信息也随之删除了信息的冗余问题数据冗余:职工很多,工资级别有限,每一级别的工资数额反复存储多次更新异常:如果将5级工资的工资数额调为620,则需要找到每个具有5级工资的职工,逐一修改关系模式的设计问题解决之道:分解!分解!!再分解!!!望闻问切:不良的数据依赖职工级别工资职工级别赵明4钱广5孙志6李开5周祥6级别工资4500560067009.1函数依赖数据的语义不仅表现为完整性约束,对关系模式的设计也提出了一定的要求。如何构造一个合适的关系模式,应构造几个关系模式,每个关系模式由哪些属性组成等,都是数据库设计问题,确切地讲是关系数据库的逻辑设计问题。*79.1.1基本概念省=f(城市):只要给出一个具体的城市值,就会有唯一一个省值和它对应,如“武汉市”在“湖北省”,这里“城市”是自变量X,“省”是因变量或函数值Y。把X函数决定Y,或Y函数依赖于X表示为:

X→Y如果有关系模式R(A1,A2,…,An),X和Y为{A1,A2,…,An}的子集,则对于关系R中的任意一个X值,都只有一个Y值与之对应,则称X函数决定Y,或Y函数依赖于X。*8示例例1:对学生关系模式Student(Sno,Sname,Sdept,Sage)有以下依赖关系:

Sno→Sname,Sno→Sdept,Sno→Sage

例2:SC(Sno,Cno,Grade)(Sno,Cno)→Grade

*9函数依赖定义设有关系模式R(A1,A2,…,An),X和Y均为{A1,A2,…,An}的子集,r是R的任一具体关系,t1、t2是r中的任意两个元组;如果由t1[X]=t2[X]可以推导出t1[Y]=t2[Y],则称X函数决定Y,或Y函数依赖于X,记为X→Y。*10称X为决定因素实例ABCDa1b1c1d1a1b2c1d2a2b2c2d2a2b3c2d3a3b3c2d4检验:A→C?C→A?AB→D?ABC123423533实例找出可能的函数依赖实例有关学生的关系模式S(S#,SN,SD,DEAN,C#,G)S#SNSDDEANC#GS#SNSDDEANC#GS01杨明D01思齐C0190S02李婉D01思齐C0187S01杨明D01思齐C0292S03刘海D02述圣C0195S04安然D02述圣C0278S05乐天D03省身C01829.1.2一些术语和符号(1)如果X→Y,但Y不包含于X,则称

X→Y是非平凡的函数依赖。(2)如果X→Y,但Y包含于X,则称

X→Y是平凡的函数依赖。

若无特别声明,我们讨论的都是非平凡的函数依赖。*14术语和符号(续)(3)如果X→Y,则X称为决定因子。(4)如果X→Y,并且Y→X,则记作

X←→Y。(5)如果X→Y,并且对于X的一个任意真子集X‘都有X‘—/→Y,则称Y完全函数依赖于X,记作:

如果X‘→Y成立,则称Y部分函数依赖于X,记作:

*15术语和符号(续)(6)如果X→Y(非平凡函数依赖,并且Y—/→X)、Y→Z,则称Z传递函数依赖于X。*16示例例1:有关系模式

SC(Sno,Sname,Cno,Credit,Grade)主键为(Sno,Cno),则函数依赖关系有:

*17示例例2:假设有关系模式S(Sno,Sname,Dept,Dept_master)假设一个系只有一个主任,主键为Sno,则函数依赖关系有:*189.1.3为什么要讨论函数依赖?有关系模式:S-L-C(Sno,Sname,Ssex,Sdept,SLOC,Cno,Grade)

其中各属性分别为:学号、姓名、性别、学生所在系、学生所住宿舍楼、课程号和考试成绩。

假设每个系的学生都住在一栋楼里,(Sno,Cno)为主键*19数据示例*20SnoSnameSsexSdeptSlocCnoGrade0811101李勇男计算机系2公寓C001960811101李勇男计算机系2公寓C002800811101李勇男计算机系2公寓C003840811101李勇男计算机系2公寓C005620811102刘晨男计算机系2公寓C001920811102刘晨男计算机系2公寓C002900811102刘晨男计算机系2公寓C004840821102吴宾女信息管理系1公寓C001760821102吴宾女信息管理系1公寓C004850821102吴宾女信息管理系1公寓C005730821102吴宾女信息管理系1公寓C007NULL0821103张海男信息管理系1公寓C001500821103张海男信息管理系1公寓C004800831103张珊珊女通信工程系1公寓C004780831103张珊珊女通信工程系1公寓C005650831103张珊珊女通信工程系1公寓C007NULL存在问题数据冗余问题数据更新问题数据插入问题数据删除问题*21结论S-L-C关系模式不是一个好的模式。如何改造这个关系模式并克服以上种种问题是关系规范化理论要解决的问题,也是讨论函数依赖的原因。解决方法:模式分解,即把一个关系模式分解成两个或多个关系模式,在分解的过程中消除那些“不良”的函数依赖,从而获得良好的关系模式*22问题给定一组函数依赖,是否能导出另外一些函数依赖,或另外的函数依赖是否成立?如关系R(A,B,C)函数依赖FD={AB,BC},问:AC是否成立?9.1.4函数依赖的推理规则一个关系的完整函数依赖集可能是很大的。理论上希望确定一组函数依赖(表示为X),但这组函数依赖的规模要比完整的函数依赖集(表示为Y)小的多,而且Y中的每个函数依赖都可以通过X中的函数依赖表示。因此,如果满足X中的函数依赖定义的完整性约束,也必然满足Y中定义的函数依赖定义的完整性约束。*24函数依赖的推理规则(续)这种想法表明必须可以从一些函数依赖推导出另外一些函数依赖。例如,如果关系中存在函数依赖:A→B,B→C,则有A→C。我们要讨论的是用一种方法来帮助确定关系的完整的函数依赖集合,并讨论如何得到一个表示完整函数依赖的最小函数依赖集。*25极小函数依赖集从一个函数依赖集X推导出的所有函数依赖的集合称为X的闭包,记为X+。需要有一些规则来帮助计算X+。Armstrong公理系统包含了一组推导规则,这些规则确定了如何从已知的函数依赖推导出新的函数依赖(Armstrong,1974)。*26Armstrong公理

假设A、B、C、D都是关系R的子集,Armstrong公理:(1)自反性:如果B是A的子集,则A→B。(2)增广性:如果A→B,则A,C→B,C。(3)传递性:如果A→B并且B→C,则A→C*27其他规则(4)自确定性:A→A(5)可分解性:如果A→B,C,则A→B和A→C(6)合并性:如果A→B和A→C,则A→B,C(7)组合性:如果A→B和C→D,则A,C→B,D*28

确定一个关系的函数依赖集F:首先确定语义上非常明显的函数依赖,然后应用Armstrong公理(规则(1)到(3))从这些函数依赖推导出附加的正确的函数依赖。具体方法:首先确定每一组会在函数依赖左边出现的属性组A,然后确定所有依赖于A的属性组。*29属性集闭包设F是属性集U上的函数依赖集,X为U的一个子集。则对于F,属性集X关于F的闭包(用X+表示)为:X+={A|XA能够由F根据Amstrong公理导出}因此,若想判断函数依赖XY是否成立,只要计算X关于函数依赖集F的闭包,若Y是X闭包中的一个元素,则XY成立。*30闭包的计算示例1

R<U,F>,U=(A,B,C,G,H,I),F={AB,AC,CGH,CGI,BH},计算

所用依赖

AB AGB

AC AGBC CGH AGBCH CGI AGBCHI =AGBCHI闭包的计算示例2

R<U,F>,U=(A,B,C,D,E),F={ABC,BD,CE,CEB,ACB},计算

所用依赖

ABC ABC

BD ABCD CE ABCDE =ABCDE闭包的计算示例3

R<U,F>,U=(A,B,C,D,E,G),F={AE,BEAG,CEA,GD},计算

所用依赖

AE ABE

BEAG ABEG GD ABEGD =ABEGD示例

R<U,F>,U=(A,B,C,G,H,I),F={AB,AC,CGH,CGI,BH},AH?CGHI?AGI?定义关系模式R,F是其函数依赖,X,Y是其属性子集,如果从F的函数依赖能够推出XY,则称F逻辑蕴涵XY,记作F├

XY被F所逻辑蕴涵的函数依赖的全体所构成的集合称作F的闭包,记作F+={XY|F├

XY}示例R(X,Y),F={XY}F+={X,XX,XY,XXY, Y,YY

XY,XYX,XYY,XYXY}9.1.5最小函数依赖集对于一组函数依赖Y和另一组函数依赖X,如果Y中的每个函数依赖都在X+中,也就是说,Y中的每个函数依赖都可以从X推导出,则称Y被X覆盖。*36函数依赖集的等价性函数依赖集F,G,若F+=G+,则称F与G等价F+=G+FG+,GF+最小覆盖Fmin单属性化:F中任一函数依赖XA,A必是单属性无冗余化:F中不存在这样的函数依赖XA,使得F与F{XA}等价既约化:F中不存在这样的函数依赖XA,在X中有真子集Z,使得F与F{XA}{ZA}等价最小函数依赖集

如果X满足如下条件,则称X是最小的函数依赖集:X中每个函数的右边都只有一个属性。对X中的任何函数依赖A→B,都不存在A的一个真子集C,使得用C→B代替A→B后得到和原来的X等价的一组依赖。从X中移出任何一个函数依赖都无法再得到和原来的X等价的一组函数依赖。*38函数依赖的等价和覆盖算法—求解函数依赖集F的最小覆盖Fmin单属性化:逐个检查F中各函数依赖FDi:XY,

若Y=A1A2

Ak,k≥2,则用诸XAi代替Y无冗余化:逐个检查F中各函数依赖XA,

令G=F{XA},若A,则从F中去掉该函数依赖既约化:逐个检查F中各函数依赖XA,

设X=B1Bm,逐个考查Bi,

若A,则以(XBi)取代X函数依赖的等价和覆盖示例一

F={AB,BA,AC,BC},求Fmin检查AB,G=F{AB}={BA,AC,BC} ={A,C},B{A,C}检查AC,G=F{AC}={AB,BA,BC} ={A,B,C},C{A,B,C}

所以从F中删除AC, Fmin={AB,BA,BC}或者

Fmin={AB,BA,AC}函数依赖的等价和覆盖示例二

F={CA,AG,CGB,BA},求Fmin F是无冗余的 判断CGB, =={G} B =={C,A,G,B} B,以C代替CG

最后,Fmin={CA,AG,CB,BA}对吗?示例例

确定S-L-C(Sno,Sname,Ssex,Sdept,Sloc,Cno,Grade)的最小函数依赖集。Sno→SnameSno→SsexSno→SdeptSdept→Sloc(Sno,Cno)→Grade*429.2关系规范化中的一些基本概念关系规范化是指导将有“不良”函数依赖的关系模式转换为良好的关系模式的理论。这里涉及到范式的概念,不同的范式表示关系模式遵守的不同的规则。*43一些术语候选键:设K为R(U,F)中的属性或属性组,若K

U,则K为R的候选键。K为决定R中全部属性值的最小属性组。主键:关系R(U,F)中可能有多个候选键,则选其中一个作为主键。全键:候选键为整个属性组。主属性与非主属性:在R(U,F)中,包含在任一候选键中的属性称为主属性,不包含在任一候选键中的属性称为非主属性。*44示例例1学生表(学号,姓名,性别,身份证号,年龄,所在系)候选键:学号,身份证号。主键:“学号”或者是“身份证号”主属性:学号,身份证号。非主属性:姓名,性别,年龄,所在系*45示例例2学生选课(学号,课程号,考试次数,成绩)候选键:(学号,课程号,考试次数),也为主键。主属性:学号,课程号,考试次数非主属性:成绩。*46示例例3教师_课程(教师号,课程号,学年)候选键:(教师号,课程号,学年),这里的候选键也是主键。主属性:教师号,课程号,学年。非主属性:无。这种候选键为全部属性的表称为全键表*47候选码的计算定义左部属性,只出现在F左边的属性右部属性,只出现在F右边的属性双部属性,出现在F两边的属性外部属性,不出现在F中的属性定理左部属性一定出现在任何候选码中右部属性一定不出现在任何候选码中外部属性一定出现在任何候选码中候选码的计算出现在左边的属性:{C,T,H,R,S}出现在右边的属性:{C,T,R}左部属性:{HS}右部属性:{}双部属性:{C,T,R}U=(C,T,H,R,S)F={C→T,HR→C,HT→R,HS→R}给出R的所有候选码候选码的计算U={A,B,C,D,E}F={AE→C,AC→D,CD→B,D→E}给出R的所有候选码出现在左边的属性:{A,C,D,E}出现在右边的属性:{B,C,D,E}左部属性:{A}右部属性:{B}双部属性:{C,D,E}外键若R(U,F)的属性(组)X(X属于U)是另一个关系S的主键,则称X为R的外键。(X必须先被定义为S的主键)用于关系表之间建立关联的属性(组)称为外键。*519.3范式关系数据库中的关系要满足一定的要求,满足不同程度要求的为不同的范式(NormalForm)。范式的种类:

第一范式(1NF)第二范式(2NF)第三范式(3NF)BC范式(BCNF)第四范式(4NF)第五范式(5NF)*52范式说明“第几范式”表示关系模式满足的条件,对关系模式的属性间的函数依赖加以不同的限制,就形成了不同的范式。范式是递进,第一范式的表比不是第一范式的表要好;第二范式的表比第一范式的表好……规范化的理论由E.F.Codd于1971年提出,目的是设计“好的”关系模式。关系规范化实际上就是对有问题的关系进行分解,从而消除操作异常。*53各范式的关系*541NF2NF3NFBCNF4NF5NF第一范式第一范式(1NF):不包含重复组的关系*55非第一范式*56解决方法一在包含重复数据的行的空列中输入合适的数据,从而消除重复组。*57学号姓名所在系课程号成绩0811101081110108111010811101李勇李勇李勇李勇计算机系计算机系计算机系计算机系C001C002C003C005968064820821102082110208211020821102吴宾吴宾吴宾吴宾信息管理系信息管理系信息管理系信息管理系C001C004C005C007768573NULL解决方法二将关系中的重复数据列移到一个新关系中,将原关键字属性也复制到新关系中,并在原表中删除被复制的重复数据列。*58学号课程号成绩0811101081110108111010811101C001C002C003C005968064820821102082110208211020821102C001C004C005C007768573NULL学号姓名所中系0811101李勇计算机系0821102吴宾信息管理系新关系9.3.2第二范式定义

如果R(U,F)∈1NF,并且R中的每个非主属性都完全函数依赖于主键,则R(U,F)∈2NF。可知:若某个第一范式关系的主键只由一个列组成,则这个关系就是第二范式关系。*59示例S-L-C(Sno,Sname,Ssex,Sdept,Sloc,Cno,Grade)(Sno,Cno)是主键,∵有Sno→Sname∴有(Sno,Cno)Sname∴不是第二范式关系*60分解方法(1)用组成主键的属性集合的每一个子集作为主键构成一个关系。(2)将依赖于这些主键的属性放置到相应的关系中。(3)最后去掉只由主键的子集构成的关系。*61分解S-L-C步骤1将该关系分解为如下三个关系(下划线部分表示主键):S-L(Sno,…)C(Cno,…)S-C(Sno,Cno,…)*62分解S-L-C步骤2将依赖于这些主键的属性放置到相应的关系中,形成如下三个关系:S-L(Sno,Sname,Ssex,Sdept,Sloc)C(Cno)S-C(Sno,Cno,Grade)*63分解S-L-C步骤3去掉只由主键的子集构成的关系。S-L-C关系最终被分解的形式为:S-L(Sno,Sname,Ssex,Sdept,Sloc)S-C(Sno,Cno,Grade)*64S-L存在问题*65SnoSnameSsexSdeptSloc0811101李勇男计算机系2公寓0811102刘晨男计算机系2公寓0821102吴宾女信息管理系1公寓0821103张海男信息管理系1公寓0831103张珊珊女通信工程系1公寓9.3.3第三范式定义:如果R(U,F)∈2NF,并且所有非主属性都不传递依赖于主键,则R(U,F)∈3NF。S-L(Sno,Sname,Ssex,Sdept,SLOC)

∵Sno→Sdept,Sdept→Sloc∴有SnoSLOC,S-L不是3NF*66分解方法对于不是候选码的每个决定因子,从关系模式中删去依赖于它的所有属性。新建一个关系模式,新关系模式中包含在原关系模式中所有依赖于该决定因子的属性。将决定因子作为新关系模式的主键。。*67分解S-L关系模式S-L分解后的关系模式为:S-D(Sno,Sname,Ssex,Sdept)S-L(Sdept,Sloc)对S-D,有:SnoSname,SnoSsex,SnoSdept,因此S-D是3NF的。对S-L,有:SdeptSloc,因此S-L也是3NF的。*68S-L-C最终分解结果S-D(Sno,Sname,Ssex,Sdept)Sno为主键Sdept为引用S-L关系模式的外键S-L(Sdept,Sloc)Sdept为主键没有外键。S-C(Sno,Cno,Grade)(Sno,Cno)为主键Sno为引用S-D关系模式的外键*699.3.4Boyce-Codd范式第二范式和第三范式都是不允许存在对主键的部分依赖和传递依赖,并没有考虑对候选键的依赖问题。如果只考虑对主键属性的依赖关系,则第三范式关系有可能存在会引起数据冗余的函数依赖。由此出现了Boyce-Codd范式,简称(BC范式或BCNF)*70BCNF定义

如果R(U,F)∈1NF,若X→Y且Y⊈X时X必包含候选键,则R(U,F)∈BCNF。通俗地讲,当且仅当关系中的每个函数依赖的决定因子都是候选键时,该范式即为BCNF。3NF和BCNF之间的区别在于对一个函数依赖A→B,3NF允许B是主键属性,而A不是候选键。而BCNF则要求A必须是候选键。*713NF与BCNF大多数情况下3NF的关系都是BCNF的。只有在非常特殊情况下,才会发生违反BCNF的情况。有可能违反BCNF的情形:关系中包含两个(或更多)复合候选键候选键有重叠,通常至少有一个重叠的属性。*72示例clientNointerviewDateinterviewTimestaffNoroomNoC0012009-10-2010:30Z005R101G0022009-10-2012:00Z005R101G0052009-10-2010:30Z002R102G0022009-10-2810:30Z005R102*73语义:每个参与会见的职员被分配到一个特定的房间中进行,一个房间在一个工作日内可以被分配多次,但一个职员在特定工作日内只在一个房间会见客户,一个客户在某个特定日期只能参与一次会见,但可以在不同的日期多次参与会见客户号

会见日期

会见开始时间

职员号

会见房间号候选键:(clientNo,interviewDate)

(staffNo,interviewDate,interviewTime)

(roomNo,interviewDate,interviewTime)函数依赖关系fd1:(clientNo,interviewDate)→interviewTime,staffNo,roomNo(主键)fd2:(staffNo,interviewDate,interviewTime)→clientNo(候选键)fd3:(roomNo,interviewDate,interviewTime)→stuffNo,ClientNo(候选键)fd4:(staffNo,interviewDate)→roomNo*74讨论fd4fd4:(staffNo,interviewDate)→roomNo虽然(staffNo,interviewDate)不是候选键,但由于roomNo是候选键(roomNo,interviewDate,interviewTime)中的一个属性,因此,这个函数依赖是3NF所允许的。又由于在主键(clientNo,interviewDate)上没有部分依赖关系或传递依赖关系,因此ClientInterview关系是3NF的。但不是BCNF,因为决定因子不是候选键。*75存在问题当要改变职员“Z005“在2009年10月20日的房间号时就需要更改关系中的两个元组。如果只有一个元组更新了房间号,而另一个元组没有更新,则会导致数据不一致。*76clientNointerviewDateinterviewTimestaffNoroomNoC0012009-10-2010:30Z005R101G0022009-10-2012:00Z005R101G0052009-10-2010:30Z002R102G0022009-10-2810:30Z005R1022009-10-202009-10-20Z005R101Z005R101分解ClientInterview关系*77clientNointerviewDateinterviewTimestaffNoC0012009-10-2010:30Z005G0022009-10-2012:00Z005G0052009-10-2010:30Z002G0022009-10-2810:30Z005staffNointerviewDateroomNoZ0052009-10-20R101Z0022009-10-20R102Z0052009-10-28R102clientNointerviewDateinterviewTimestaffNoroomNoC0012009-10-2010:30Z005R101G0022009-10-2012:00Z005R101G0052009-10-2010:30Z002R102G0022009-10-2810:30Z005R102分解3NFBCNF可能产生的问题可能会丢失一些函数依赖,即经过分解会将决定因子和由它决定的属性放置在不同的关系中。这时要满足原关系中的函数依赖就非常困难,而且一些重要的约束也可能随之丢失。当发生这种情况时,最好的方法是将规范化过程只进行到3NF。*78问题(续)例:对ClientInterview的分解(clientNo,interviewDate,interviewTime,staffNo)(staffNo,interviewDate,roomNo)丢失了函数依赖:(roomNo,interviewDate,interviewTime)→staffNo,clientNo(fd3)但如果不进行分解,在ClientInterview关系中就会存在数据冗余。*79说明在具体的实际应用过程中,到底应该将关系规范化到3NF,还是BCNF,主要由3NF的关系所产生的数据冗余量与丢失函数依赖所造成的影响哪个更重要决定。例如:如果在实际情况中,每个职员每天只会见一次客户,则fd4函数依赖不会导致数据冗余,因此无需将ClientInterview分解为BCNF关系;如果实际情况是,每位职员每天可能多次会见客户,则fd4函数依赖就会造成数据冗余,这时将ClientInterview分解为BCNF可能会更好。*809.3.5多值依赖与第四范式尽管BCNF消除了更新异常,但是通过对另一种称为多值依赖的研究表明,这种类型的依赖也会导致数据冗余,从而造成操作异常。例如:

商店号职工名顾客名*81storeNosNamecNameS002张强王萍S002李清王萍S002张强钱景S002李清钱景是BCNF存在问题这个关系中,在某商店工作的职工和在某商店买东西的顾客之间没有直接的联系。因此,为保证数据的一致性,必须建立新的元组将每个职工和顾客联系在一起。例如,如果要为“S002”商店新增一名职工,为了保证关系的一致性就必须建立两个新的元组,每个元组对应一名顾客。这是该关系更新异常的一个例子。*82示例为“S002”商店新增一名职工。*83storeNosNamecNameS002张强王萍S002李清王萍S002张强钱景S002李清钱景S002王宏王萍S002王宏钱景原因是关系中存在多值依赖。因为StoreStuffCustomer关系中存在两个一对多关系(商店和职工以及商店和顾客)S002王宏王萍S002王宏钱景多值依赖为了解决BCNF的问题,R.Fagin提出了多值依赖(MVD)和第四范式(4NF)的思想。多值依赖是指一组值而不是单个值之间的函数依赖。定义:在关系模式R<X,Y,Z>中,如果对每个X值,都存在一组Y值与其对应,而Y的这组值又不以任何方式与Z相关,则称Y多值依赖于X,记为:X→→Y。*84示例StoreStuffCustomer(storeNo,sName,cName)存在多值依赖:storeNo→→sNamestoreNo→→cName*85注意包含多值依赖的关系至少包含3个属性可能有包含两个或更多属性的表,这些属性内部多值依赖于另一个属性,但这样的关系中不存在多值依赖,多值依赖必须是数据间彼此相互独立。函数依赖是指一个属性的值对应另一个属性的唯一值,而多值依赖是指一个属性的值对应另一个属性的多个值。*86示例1学生姓名图书管理员书名借阅日期*87studentNamelibrarianbookborrowDate李勇张洪波数据库系统基础2009-7-8李勇李长亮软件工程2009-7-8王萍李长亮计算机网络2009-9-1李勇张洪波数据库系统基础2009-11-1张海李长亮计算机网络2009-8-20张海张洪波计算机网络2009-11-2张海王清数据通信基础2009-11-2∵属性间不相互独立。∴不存在多值依赖,也不存在信息冗余。示例2

课程名学生名课程教材*88courseNamestudentNametextBooks数据库技术及应用李勇数据库系统基础数据库技术及应用李勇数据库实践教程数据库技术及应用王萍数据库系统基础数据库技术及应用王萍数据库实践教程电子工程李勇数字电路电子工程李勇自动控制原理通信基础张海计算机网络通信基础张海数据通信基础∵

studentName和textBooks是相互独立的。∴存在多值依赖,studentName和textBooks是关于courseName的多值属性。∴有数据冗余。多值依赖的另一种描述给定X的一个特定值,就有一组完全由X值独立决定的Y值,并且不依赖于R中剩余属性Z的值。因此,只要出现Y值不同但X值相同的两行,那么在X值相同Z值不同的各行中,Y值一定重复。*89courseNamestudentNametextBooks数据库技术及应用李勇数据库系统基础数据库技术及应用李勇数据库实践教程数据库技术及应用王萍数据库系统基础数据库技术及应用王萍数据库实践教程XY平凡与非平凡多值依赖对于关系R中的一个多值依赖A→→B,如果:(a)B是A的子集,或者(b)A∪B=R,则多值依赖是平凡的。如果(a)和(b)都不满足,则是非平凡的。非平凡多值依赖会引起数据冗余。*90非平凡多值依赖示例*91storeNosNamecNameS002张强王萍S002李清王萍S002张强钱景S002李清钱景courseNamestudentNametextBooks数据库技术及应用李勇数据库系统基础数据库技术及应用李勇数据库实践教程数据库技术及应用王萍数据库系统基础数据库技术及应用王萍数据库实践教程电子工程李勇数字电路电子工程李勇自动控制原理第四范式定义:满足BCNF范式并且不包含非平凡多值依赖的关系即为第四范式关系(4NF)。第四范式的关系防止关系中存在非平凡多值依赖和由于非平凡多值依赖引起的数据冗余,是一种比BCNF更强的范式。*92分解方法通过将多值依赖属性和决定因子的副本移到新关系中,可将BCNF规范化为第四范式。*93storeNosNamecNameS002张强王萍S002李清王萍S002张强钱景S002李清钱景storeNosNameS002张强S002李清storeNocNameS002王萍S002钱景9.3.6连接依赖与第五范式是BCNF和4NF的关系。语义:只有当工作需要某个技能时,他们才使用特定的或全部的技能。*94personNameskillTypejobNo李勇系统分析J01李勇系统分析J02李勇DBAJ02李勇DBAJ03刘晨DBAJ03张海系统分析J01问题如果删除(李勇,DBA,J02)元组,则也必须删除(李勇,系统分析,J02)元组,因为如果某个工作需要某些技能的话,这个职工必须应用他的所有技能。显然存在操作异常。*95personNameskillTypejobNo李勇系统分析J01李勇系统分析J02李勇DBAJ02李勇DBAJ03刘晨DBAJ03张海系统分析J01李勇DBAJ02李勇系统分析J02连接依赖(JD)无损连接是指将一个关系分解为两个关系后,对这两个关系进行连接还能得到原来的关系。如果关系R1和R2在C上的连接与关系R相等,则称存在一个连接依赖,这里R1和R2是给定关系R(A,B,C,D)的两个分解:R1(A,B,C)和R2(C,D),而且,R1和R2是R的无损分解。*96连接依赖(续)如果用*(R1,R2,R3,…)代表关系R1、R2、R3、…是R的一个连接依赖,则关系R满足连接依赖*(R1,R2,R3,…)的必要条件是:R=R1∪R2∪……∪Rn当将关系R基于R中的一个多值依赖X→→Y分解为R1=X∪Y和R2=(R-Y)时,这个分解就具有无损连接特性。*97示例*98连接HasSkills和NeedsSkill*99是一个包含所有能够应用在每个工作上的技能的关系第五范式定义:不包含连接依赖的关系是5NF。*100storeNoitemDescriptionsupplierNoSG004面包SP1SG004椅子SP2SG006面包SP2语义:当一个商店需要某种类型的商品时,如果有供应商提供这类商品,并且该供应商已经为该商店提供过至少一种其他类型的商品,则该供应商也将为该商店提供该类商品。设itemDescription唯一标识每种类型的商品。考虑如果:

商店SG004需要面包供应商SP2为商店SG004供货供应商SP2供应面包则:供应商SP2为商店SG004供应面包。*101storeNoitemDescriptionsupplierNoSG004面包SP1SG004椅子SP2SG006面包SP2如果前述约束存在,则StoreItemSupplier关系的任何合法状态都必然存在元组:

(SG004,面包,SP2)这是一种更新异常的例子,说明该关系中存在连接依赖。不是5NF。*102更新异常图示*103消除连接依赖将StoreItemSupplier关系分解为三个第五范式关系:*104storeNoitemDescriptionSG004面包SG004椅子SG006面包itemDescriptionsupplierNo面包SP1椅子SP2面包SP2storeNosupplierNoSG004SP1SG004SP2SG006SP2StoreItemStoreSupplierItemSupplier9.3.7规范化小结在关系数据库中,对关系模式的基本要求是要满足第一范式。但第一范式的关系会存在数据操作异常,因此,人们寻求解决这些问题的方法,这是规范化引出的目的。*105规范化小结(续)规范化的基本思想是逐步消除数据依赖中不合适的部分,通过模式分解的方法使关系模式逐步消除操作异常。分解的基本思想是让一个关系模式只描述一件事情,即面向主题设计数据库的关系模式。因此,规范化的过程就是让每个关系模式概念单一化的过程。规范化的方法是模式分解,且确保分解后产生的模式与原模式等价。*1069.4关系模式的分解准则模式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论