1、数据库原理与应用数据库原理与应用数据库系统概论第四版王 珊 萨师煊第第6章章 关系数据理论关系数据理论 数据库设计的一个最基本的问题是怎样建立一个好的数据库模式。Codd提出了一套关系数据库设计理论关系的规范化理论,根据现实世界存在的数据依赖进行关系模式的规范化处理,从而得到一个好的数据库设计。6.1 问题的提出问题的提出1、问题的提出 关系的描述:关系的描述:R(U,D,DOM,F)关系是一个五元组。关系是一个五元组。R为关系名,为关系名,U为属性集为属性集合,合,D为属性组为属性组U中属性所来自的域,中属性所来自的域,DOM为为属性到域的映射集合,属性到域的映射集合,F为属性间数据的依赖为
2、属性间数据的依赖关系集合。关系集合。6.1 问题的提出(续)问题的提出(续)2、数据依赖属性间数据的依赖关系集合属性间数据的依赖关系集合F是描述关系的元是描述关系的元组语义,限定关系内部属性与属性间必须满足组语义,限定关系内部属性与属性间必须满足的约束条件。的约束条件。数据依赖是通过一个关系中属性间值的依赖与数据依赖是通过一个关系中属性间值的依赖与否体现出来的数据间的相互关系。否体现出来的数据间的相互关系。最重要的数据依赖是最重要的数据依赖是函数依赖函数依赖(FD)和和多值依赖多值依赖(MVD)6.1 问题的提出(续)问题的提出(续)实例:建立一个数据库,涉及的对象包括:学生的学号(Sno)、
3、所在系(Sdept)、系主任姓名(Mn)、课程名(Cname)、成绩(Grade)。要求如下:(1)一个系有若干学生,但一个学生只属于一个系;(2)一个系只有一个系主任;(3)一个学生可以选多门课程,每门课程有若干学生选修;(4)每个学生学习每一门课程有个成绩。建立关系模式:建立关系模式:Student(SNO,SDEPT,MN,CNAME,GRADE)这个关系模式存在这个关系模式存在4个问题:个问题:(1)数据冗余:一个学生选修多门课程,所在系和系主任就重复数据冗余:一个学生选修多门课程,所在系和系主任就重复存储多次。存储多次。(2)更新异常:当更新某些数据时,容易造成存储数据的不一致更新异
4、常:当更新某些数据时,容易造成存储数据的不一致性。如换系主任了,则必须修改与该系学生有关的每一个元组。性。如换系主任了,则必须修改与该系学生有关的每一个元组。(3)插入异常:若某个学生未学习课程,则他的信息就无法插入。插入异常:若某个学生未学习课程,则他的信息就无法插入。(4)删除异常:当要删除学生所有成绩时,将所有关于该学生的删除异常:当要删除学生所有成绩时,将所有关于该学生的信息都删除了。信息都删除了。F=SNOSDEPT,SDEPT MN,(SNO,CNAME)G原因:原因:由存在于模式中的由存在于模式中的某些数据依赖某些数据依赖引起的引起的解决方法:解决方法:通过通过分解分解关系模式来
5、消除其中不合适的数据依赖关系模式来消除其中不合适的数据依赖F=SNOSDEPT,SDEPT MN,(SNO,CNAME)GS(SNO,SDEPT)SG(SNO,CNAME,Grade)DEPT(SDEPT,MN)6.2 规范化规范化 规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。1、函数依赖 定义定义设R(U)是属性集U上的关系模式,X,Y是U的子集,若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作XY。几点说明:几点说明:
6、(1)函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。(2)函数依赖和别的数据之间的依赖关系一样,是语义范畴的概念。我们只能根据数据的语义来确定函数依赖。(3)数据库设计者可以对其做出强制的规定。6.2 规范化(续)规范化(续)1、函数依赖基本术语和符号基本术语和符号若XY,但Y X,则称XY是非平凡的函数依赖,反之称为平凡的函数依赖。若XY,则X叫做决定因素若XY,YX,则记作XY若Y不函数依赖于X,则记作X Y6.2 规范化(续)规范化(续)1、函数依赖三种函数依赖三种函数依赖 完全函数依赖:完全函数依赖:在R(U)中,如果XY,并且对
7、于X的任何一个真子集X,都有XY,则称Y对X完全函数依赖,记作:X F Y6.2 规范化(续)规范化(续)如关系如关系SC(SNO,CNO,GRADE),(SNO,CNO)GRADE SPJ(SNO,PNO,JNO,QTY),(SNO,PNO,JNO)QTYFF1、函数依赖三种函数依赖三种函数依赖 部分函数依赖:部分函数依赖:若XY,但Y不完全依赖于X,则称Y对X部分函数依赖,记作:X P Y6.2 规范化(续)规范化(续)如:如:SC(SNO,CNO,SNAME,GRADE)(SNO,CNO)SNAME SNO SNAMEP1、函数依赖三种函数依赖三种函数依赖 传递函数依赖:传递函数依赖:在
8、R(U)中,如果XY(Y X),YX,YZ,则称Z对X传递函数依赖。记作:X Z6.2 规范化(续)规范化(续)传递如:如:S(SNO,SDEPT,MNAME)SNO SDEPT,SDEPTMNAME SNO MNAME传递候选关键字:候选关键字:学号学号FD学号学号姓名,学号姓名,学号出生日期,学号出生日期,学号班号,班号班号,班号系名,系名系名,系名宿舍区宿舍区传递函数依赖:传递函数依赖:学号学号班号班号系名,学号系名,学号系名系名班号班号系名系名宿舍区,班号宿舍区,班号宿舍区宿舍区学号学号系名系名宿舍区,学号宿舍区,学号宿舍区宿舍区传递传递传递分析关系模式:分析关系模式:STUDENT(
9、学号,姓名,出生日期,系名,班号,宿舍区),学号,姓名,出生日期,系名,班号,宿舍区),学生属于某个班级,班级属于某个系,其中一个系的学生分学生属于某个班级,班级属于某个系,其中一个系的学生分在一个宿舍区,指出其候选关键字,函数依赖关系和存在的在一个宿舍区,指出其候选关键字,函数依赖关系和存在的传递函数依赖。传递函数依赖。6.2 规范化(续)规范化(续)2、码定义:设K为R(U,F)中的属性或属性组合,若KU,则K为R的候选码候选码。若候选码多于一个,则选定其中的一个为主码主码。主属性主属性:包含在任何一个候选码中的属性(Prime attribute)。非主属性非主属性:不包含在任何码中的属
10、性称为非主属性或非码属性。定义:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码外部码。F关系模式关系模式S(S(SnoSno,Sdept,Sage),Sdept,Sage),单个属性,单个属性SnoSno是码,是码,SCSC(SnoSno,CnoCno,GradeGrade)中,()中,(SnoSno,CnoCno)是码)是码关系模式关系模式R R(P P,W W,A A),其中:),其中:P P为演奏者,为演奏者,W W为作品,为作品,A A为听众。为听众。(1)(1)一个演奏者可以演奏多个作品一个演奏者可以演奏多个作品 (2)(2)某一作品可被多个演奏者
11、演奏某一作品可被多个演奏者演奏 (3)(3)听众可以欣赏不同演奏者的不同作品听众可以欣赏不同演奏者的不同作品 码为码为(P(P,W W,A)A),即,即全码(全码(All-KeyAll-Key)举例:举例:6.2 规范化(续)规范化(续)3、范式(NF)关系数据库中的关系是要满足一定要求的,满关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式,目前主要有六足不同程度要求的为不同范式,目前主要有六种范式:种范式:5NF 4NF BCNF 3NF 2NF 1NF一个低一级的范式,通过分解,可以转换为若一个低一级的范式,通过分解,可以转换为若干个高一级范式的关系模式的集合,这个过程干
12、个高一级范式的关系模式的集合,这个过程就叫就叫规范化规范化。6.2 规范化(续)规范化(续)3、范式(NF)第一范式第一范式 如果一个关系模式如果一个关系模式R的所有属性都是不可分的的所有属性都是不可分的基本数据项,则基本数据项,则R1NF。即当表中每一行的每一列只具有唯一值时,表被认为是符合第一范式(1NF)的。1NF是对关系的最低要求,不满足1NF的关系是非规范化的关系。分解方法:分解方法:非规范化关系转化为满足非规范化关系转化为满足1NF的规范化关系的规范化关系方法很简单,只要将表分别从横向、纵向展开即可。方法很简单,只要将表分别从横向、纵向展开即可。举例:举例:规范化练习练习练习练习答
13、案:答案:6.2 规范化(续)规范化(续)3、范式(NF)第二范式第二范式 若若R 1NF,且每一个非主属性完全函数依赖,且每一个非主属性完全函数依赖于码,则于码,则R 2NF。分解方法:分解方法:找出并抹去函数依赖于码的一部分而不是整个码的属找出并抹去函数依赖于码的一部分而不是整个码的属性,将它们放到不同的表中。性,将它们放到不同的表中。组合剩余的属性。组合剩余的属性。规范化过程:消除非主属性对码的部分函数依赖规范化过程:消除非主属性对码的部分函数依赖关系关系S(学号,系名,宿舍区,课程号,成绩)学号,系名,宿舍区,课程号,成绩)举例:举例:码(学号,课程号)码(学号,课程号)函数依赖集:函
14、数依赖集:(学号,课程号)(学号,课程号)成绩成绩 学号学号系名系名 学号学号宿舍区宿舍区(学号,课程号)(学号,课程号)P系名系名 (学号,课程号)(学号,课程号)P宿舍区宿舍区解决:解决:SC(学号学号,课程号课程号,成绩成绩)S-L(学号学号,系名系名,宿舍区宿舍区)将下面的将下面的R R关系规范化到第二范式关系规范化到第二范式练习:练习:答案答案:练习:练习:6.2 规范化(续)规范化(续)SC(学号,课程号,成绩)S-L(学号,系名,宿舍区)仍然存在问题:(1)插入异常,若某个系因种种原因,还未有学生,则无法将该系的信息存入数据库。(2)删除异常,如果某个系的学生全部毕业了,在删除该
15、系学生的信息的同时,该系的信息也丢掉了。(3)数据冗余度大,每个系的学生都住在同一个地方,关于系的住处的信息却重复出现。(4)修改复杂,当调整学生住处时,需要更改大量学生的属性。出现上述问题的原因是因为在关系模式中仍然存在有传递函出现上述问题的原因是因为在关系模式中仍然存在有传递函数依赖关系。数依赖关系。6.2 规范化(续)规范化(续)3、范式(NF)第三范式第三范式 关系模式关系模式R(U,F)中若不存在这样的码中若不存在这样的码X、属性、属性组组Y及非主属性及非主属性Z(Z Y),使得,使得XY,YZ成立,成立,则称则称R(U,F)3NF。分解方法:分解方法:发现和抹去函数依赖于不是主属性
16、的非主属性。把它发现和抹去函数依赖于不是主属性的非主属性。把它们放入不同的表格;们放入不同的表格;组合剩余的属性。组合剩余的属性。3NF消除消除2NF的非主属性的传递函数依赖的非主属性的传递函数依赖2NF关系模式S-L(学号,系名,宿舍区)中函数依赖:学号系名,系名学号 学号宿舍区 学号宿舍区,S-L中存在非主属性对码的传递函数依赖,则S-L3NF举例:举例:传递对对S-L(SNO,SDEPT,SLOC)分解分解SD(SNO,SDEPT)DL(SDEPT,SLOC)将下面的将下面的R R关系规范化到第三范式关系规范化到第三范式练习:练习:答案答案:练习:练习:6.2 规范化(续)规范化(续)但
17、是满足3NF的关系模式也未必就是好的关系模式。如:关系模式STC(S,T,C)中,S表示学生,T表示教师,C表示课程。假设每个教师只教一门课,每门课由若干教师教,某一学生选定某门 课,就对应一个固定的教师。函数依赖集:(S,T)C,(S,C)T,TC,S C(S,T)、(S,J)都是候选码。T,S只是主属性,既不是候选码,也不包含候选码,原因是TC,SC,即主属性C部分函数依赖于(S,T)。解决办法是将STC分解。因此,引入一个新的范式,BCNF 范式,称为修正的或扩充的第三范式。6.2 规范化(续)规范化(续)3、范式(NF)Boyce-Codd(BCNF)范式范式 关系模式关系模式R(U,
18、F)1NF,若,若XY且且Y X时时X必必包含码,则包含码,则R(U,F)BCNF。即:关系中的每一个决定因素都包含码。一个满足BCNF的关系模式有:所有非主属性对每个码都是完全函数依赖 所有的主属性对每一个不包含它的码,也是完全函数依赖 没有任何属性完全函数依赖于非码的任何一组属性6.2 规范化(续)规范化(续)3、范式(NF)Boyce-Codd(BCNF)范式范式 解决办法:发现和抹去具有函数依赖关系主属性 把候选键的一部分和与它有函数依赖关系的属性放入另外的表中 组合剩余的项为一个表将关系将关系STC分解为分解为ST(S,T)TJ(T,C)配件管理表如下,其中一个仓库由若干名管理员管理
19、,一配件管理表如下,其中一个仓库由若干名管理员管理,一个管理员只管理一个仓库,他们管理所在仓库的所有商品。个管理员只管理一个仓库,他们管理所在仓库的所有商品。练习:练习:答案答案:函数依赖集包括:函数依赖集包括:职工编号职工编号仓库编号,仓库编号,(仓库编号,配件编号仓库编号,配件编号)数量,数量,(职工编号,配件编号职工编号,配件编号)数量数量(职工编号,配件编号职工编号,配件编号)仓库编号仓库编号码为码为:(职工编号,配件编号职工编号,配件编号)练习:练习:答案答案:练习:练习:6.2 规范化(续)规范化(续)3、范式(NF)多值依赖多值依赖 设关系模式R(U),X,Y,Z是U的子集,并且
20、Z=U-X-Y。若对于R(U)的任一关系r,给定的一对(X,Z)值,存在一组Y的值与之对应,并且这组值仅仅决定于X值而与Z值无关,称为Y多值依赖于X或者X多值决定Y,记作XY。若XY,若Z,则XY是非平凡的多值依赖;若Z=,则是平凡的多值依赖。6.2 规范化(续)规范化(续)3、范式(NF)多值依赖多值依赖 多值依赖与函数依赖的区别:(1)函数依赖中,xy的有效性由x,y两个属性集决定;多值依赖xy不仅与x,y两个属性集有关,而要检查其余属性z。因此,多值依赖的有效性与属性集的范围有关。(2)若函数依赖xy成立,则对于y的任一子集y均有xy成立。而多值依赖却不能确定。6.2 规范化(续)规范化
21、(续)3、范式(NF)第四范式第四范式 关系模式关系模式R(U,F)1NF,如果对于,如果对于R的每个非平凡的每个非平凡多值依赖多值依赖XY(Y X),),X都含有码,则称都含有码,则称R(U,F)4NF。4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。关系模式仓库管理关系模式仓库管理(仓库号仓库号,管理员管理员,商品名商品名)中,中,(仓库号仓库号,商品名商品名)管理员,仓库号管理员,仓库号管理员管理员对于仓库号对于仓库号管理员,决定因素仓库号不包含码,管理员,决定因素仓库号不包含码,仓库管理仓库管理 4NF缺点:数据冗余度大缺点:数据冗余度大举例:举例:解决:解决:分
22、解为仓库管理分解为仓库管理1(仓库号仓库号,管理员管理员)仓库管理仓库管理2(仓库号仓库号,商品名商品名)4、规范化小结 规范化的基本思想是逐步消除数据依赖中不合规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程适的部分,使模式中的各关系模式达到某种程度的分离,即度的分离,即“单一化单一化”的模式设计原则。让的模式设计原则。让一个关系去描述一个概念、一个实体或实体间一个关系去描述一个概念、一个实体或实体间的一种联系。若多于一个概念就把它的一种联系。若多于一个概念就把它“分离分离”出去。出去。分解的基本原则:无损分解分解的基本原则:无损分解6.2 规范化(续)规范化
23、(续)6.2 规范化(续)规范化(续)规范化过程概括:指出下列关系模式是第几范式指出下列关系模式是第几范式(1)R(X,Y,Z)FD=XYZ(2)R(X,Y,Z)FD=YZ,XZY(3)R(X,Y,Z)FD=YZ,YX,XYZ(4)R(X,Y,Z)FD=XY,XZ(5)R(W,X,Y,Z)FD=XZ,WXY(6)R(A,B,C)FD=AB,BA,CA练习练习1:假设某商业集团数据库中有一关系模式假设某商业集团数据库中有一关系模式R(商店编号,商商店编号,商品编号,数量,部门编号,负责人)品编号,数量,部门编号,负责人),若规定:,若规定:每个商店的每种商品只在一个部门销售;每个商店的每种商品只
24、在一个部门销售;每个商店的每个部门只有一个负责人;每个商店的每个部门只有一个负责人;每个商店的每种商品只有一个库存数量;每个商店的每种商品只有一个库存数量;解答:解答:(1)写出关系写出关系R的基本函数依赖的基本函数依赖(2)找出找出R的候选码的候选码(3)判断判断R的所属范式,若不属于的所属范式,若不属于3NF,则分解为,则分解为3NF练习练习2:有这样一个关系模式有这样一个关系模式Student(Student(学号,姓名,系别,课程编号,课程名,成绩学号,姓名,系别,课程编号,课程名,成绩)(1 1)学号是候选码吗?说明理由。)学号是候选码吗?说明理由。(2 2)该关系模式的主码是什么?
25、)该关系模式的主码是什么?(3 3)该关系模式是否存在部分函数依赖?如果存在,请)该关系模式是否存在部分函数依赖?如果存在,请写出两个。写出两个。(4)该关系模式满足第几范式?)该关系模式满足第几范式?(5)将该关系模式分解为)将该关系模式分解为3NF。练习练习3:设有关系模式:设有关系模式:TEACHER(教师编号,教师姓名,电话,所在部门,教师编号,教师姓名,电话,所在部门,借阅图书编号,书名,借书日期,还书日期,图书借阅图书编号,书名,借书日期,还书日期,图书备注备注)(1)教师编号是候选码吗?说明理由)教师编号是候选码吗?说明理由(2)该关系模式的主码是什么?)该关系模式的主码是什么?
26、(3)该关系模式是否存在部分函数依赖?如果存在,)该关系模式是否存在部分函数依赖?如果存在,请写出至少两个?请写出至少两个?(4)该关系模式满足第几范式?)该关系模式满足第几范式?(5)将该关系模式分解为)将该关系模式分解为3NF。练习练习4:1、设、设R(A,B,C,D,E),FD=AB,BC,ADE,试求:试求:(1)R的候选码的候选码(2)R所属的范式所属的范式(3)将)将R分解为分解为BCNF,且具有无损连接且具有无损连接作业:作业:2、设关系模式、设关系模式R(A,B,C,D,E,G),FD=A-D,E-D,D-B,BC-D,EC-A。试求:。试求:(1)R的候选码的候选码(2)R所属的范式所属的范式作业:作业: