数据库关系模式的规范化.ppt
《数据库关系模式的规范化.ppt》由会员分享,可在线阅读,更多相关《数据库关系模式的规范化.ppt(144页珍藏版)》请在三一办公上搜索。
1、第 4 章,关系模式的规范化设计理论,第4章 关系模式的规范化设计理论,建立关系数据库的任务:先设计关系模式,若干关系模式构成关系数据库模式。对一个具体的应用问题,如何构造一个适合于它的数据库模式,即关系数据库模式设计应遵循那些原则。这是本章主要讨论的问题。在介绍第1章的例子,曾经问过为什么要设计成Students,Courses,Reports三个基本表,而不是一张表呢?,第4章 关系模式的规范化设计理论,关系数据库的规范化设计是指面对一个现实问题,如何选择一个比较好的关系模式集合。规范化设计理论主要包括三个方面的内容:数据依赖、范式和模式设计方法。其中数据依赖起着核心的作用。数据依赖研究数
2、据之间的联系,范式是关系模式的标准,模式设计方法是自动化设计的基础。规范化设计理论对关系数据库结构的设计起着重要的作用。,第4章 关系模式的规范化设计理论,4.2 关系模式的函数依赖,4.3 关系模式的规范化,4.4 关系模式的分解特性,4.1 问题的提出,4.1 问题的提出,4.1.2 异常原因分析,4.1.3 异常问题的解决,4.1.1 关系模式可能存在的异常,关系模型的外延和内涵,外延就是通常所说的关系、表或当前值,它的基本性质已在第2章介绍过。由于用户经常对关系进行插入、删除和修改操作,因此外延是与时间有关的,随着时间的推移在不断变化。内涵是与时间独立的,是对数据的定义以及数据完整性约
3、束的定义。对数据的定义包括对关系、属性、域的定义和说明。对数据完整性约束的定义涉及面较广,主要包括以下几个方面:静态约束,涉及到数据之间联系(称为“数据依赖,data dependences)、主键和值域的设计。动态约束,定义各种操作(插入、删除、修改)对关系值的影响。,4.1.1 关系模式可能存在的异常(1),例4.1 以学生选课背景为,假设我们设计了如下一个关系模式:StudyInfo(Sno,Sname,DeptName,DeptHead,Cname,Grade)其中Sno,Cname是唯一候选键,因此是主键。表4.1 是关系模式StudyInfo的一个实例关系。,表4.1 关系Stud
4、yInfo,4.1.1 关系模式可能存在的异常(2),StudyInfo这个关系存在的几个异常问题:插入异常。比如一个刚刚成立的系,但尚未招收学生,则因属性Sno为空,导致诸如系主任姓名之类的信息无法存入数据库;同样,没被学生选修的课程信息也无法存入数据库。删除异常。如一个系的学生毕业了,删除学生记录时不情愿地将系主任姓名等信息也一起删除了。冗余过多。如一个系的系名、系主任姓名都要与该系学生每门课的成绩出现的次数一样多。既浪费存储空间又要付出很大的代价来维护数据库的完整性。当系主任更换后,必须逐一修改该系学生选修课程的每一个元组。,4.1.2 异常原因分析(1),例子启示:一个“好”的模式不应
5、当发生插入异常和删除异常,且数据冗余应尽可能地少。结论:关系模式StudyInfo“不怎么好”或“不好”StudyInfo“不好”或存在异常问题原因:关系模式的属性之间存在过多的“数据依赖”,先非形式地讨论一下这个概念。数据依赖是指关系中属性值之间的相互联系,它是现实世界属性间相互联系的体现,是数据之间的内在性质,是语义的体现。现在人们已经提出了许多种类型的数据依赖,其中最重要的是函数依赖(Functional Dependence,FD)和多值依赖(MultiValued Dependence,MVD)。,4.1.2 异常原因分析(2),函数依赖极为普遍地存在于现实生活中。对关系StudyI
6、nfo,因一个学号Sno仅对应一个学生,一个学生只在一个系注册学习。因而,当学号Sno的值确定之后,姓名Sname和他所在系DeptName的值也就被唯一地确定了。就象自变量x的值确定之后,相应函数f(x)的值也就唯一地确定一样,我们说Sno决定Sname和DeptName,或者说Sname,DeptName函数依赖于Sno,记作:SnoSname,SnoDeptName。,4.1.2 异常原因分析(3),对关系模式StudyInfo,其属性集U=Sno,Sname,DeptName,DeptHead,Cname,Grade。根据学校管理运行的实际情况,我们还知道:一个学生只有一个学号,即Sn
7、oSname;一个系有若干学生,但一个学生只属于一个系,即 SnoDeptName;一个系只有一个系主任,即 DeptNameDeptHead;每个学生学习每一门课都有一个成绩,即Sno,CnameGrade。,4.1.2 异常原因分析(4),这样就得到关系模式StudyInfo属性集U上所有函数依赖组成的集合F,简称函数依赖集。F=SnoSname,SnoDeptName,DeptNameDeptHead,Sno,CnameGrade。所谓关系模式StudyInfo中的数据依赖过多,是指它存在多种类型的函数依赖,比如,既有主健 Sno,CnameGrade,又有Sno,Cname中部分属性S
8、no确定的SnoSname,还有非主键属性DeptName确定的DeptNameDeptHead等。,4.1.3 异常问题的解决(1),异常问题的解决方法:将关系模式分解成若干个只有单一“数据依赖”的关系模式。因为关系模式StudyInfo出现异常问题是由于属性之间存在过多的“数据依赖”造成,分解的目的就是减少属性之间过多的“数据依赖”,以期消除关系模式中出现的异常问题。,4.1.3 异常问题的解决(2),例4.2 将StudyInfo分解为如下三个新的关系模式:Students(Sno,Sname,DeptName),Reports(Sno,Cname,Grade),Departments(
9、DeptName,DeptHead),则分解后的每个关系模式,其属性之间的函数依赖都大大减少,关系 Students的函数依赖是SnoSname,SnoDeptName;Reports的函数依赖是Sno,CnameGrade;Departments的函数依赖是DeptNameDeptHead。,4.1.3 异常问题的解决(3),关系模式的分解:用若干属性较少的关系模式代替原有关系模式的过程。比如用Students,Reports,Departments就是关系模式StudyInfo的一个分解。表4.1表示的关系StudyInfo就可以用表4.2表4.4对应的关系来表示。从表4.2表4.4可以看
10、出,没有分解之前存在的插入异常和删除异常等问题已经基本消除,且数据冗余程度大大降低。,4.1.3 异常问题的解决(3),表4.2 关系Students,4.1.3 异常问题的解决(3),表4.3 关系Reports,4.1.3 异常问题的解决(3),表4.4 关系Departments,4.1.3 异常问题的解决(4),前面通过实例说明,解决关系模式异常问题的方法是对关系模式进行分解。但分解的理论问题还没有解决:怎样判定关系模式好或不好?(关系模式的标准问题)怎样判定一个关系模式的分解是好(有益)的?(分解的标准问题)怎样将一个关系模式分解为一组好的关系模式?(分解方法问题)这就是规范化理论,
11、它正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。这些就是后面几节所涉及的内容。,4.2 关系模式的函数依赖,函数依赖的一般概念,候选键与主键,函数依赖的推理规则,再论关系与关系模式,4.2.1 再论关系与关系模式,关系:元组的集合,笛卡尔积的一个子集,其实质是一张二维表,表的每一行为一个元组。关系模式:对元组中数据组织方式的结构性描述,其实质是删去所有元组后的空表格。关系与关系模式的联系:关系模式是相对稳定的、静态的,而关系却是动态变化的,不稳定的,且关系的每一次变化结果,都是关系模式对应的一个新的具体关系。注意:关系模式R
12、(U)对应的具体关系通常用小写字母r来表示。,4.2.2 函数依赖的一般概念(1),定义4.1 设R(U)是属性集U=A1,A2,An上的关系模式,X和Y是U的子集。若对R(U)的任一具体关系r中的任意两个元组t1和t2,只要t1X=t2X 就有t1Y=t2Y。则称“X函数确定Y”或“Y函数依赖于X”(Founctional Dependence),记作XY。类似于y=f(x)其中t1X和t1Y分别表示元组t1在属性X和Y上的取值。“X函数确定Y”的含义是:在关系模式R(U)的任意一个具体关系r中,不可能存在这样的两个元组,它们在X上的属性值相等,而在Y上的属性值不等。注意:函数依赖不是指关系
13、模式R(U)的某个或某些具体关系满足的约束条件,而是指R(U)的一切具体关系r都要满足的约束条件。,4.2.2 函数依赖的一般概念(2),例4.3 设有一个描述学生信息的关系模式:R(Sname,Sex,Birthday,Phone),其属性名分别代表学生的姓名、性别、出生日期和电话号码属性。它的一个具体关系r如表4.5所示。,4.2.2 函数依赖的一般概念(3),如果仅从关系模式R(U)的一个具体关系r出发,由于r没有相同姓名的元组(学生),所以我们就会得出:对于关系模式R有SnameSex,SameBirthday,SnamePhone的结论。但这个结论是不正确的。比如,对关系模式R的另外
14、一个具体关系r1(表4.6),这时,从关系r得出的函数依赖就不成立了。所以,关系模式中的函数依赖是对这个关系模式的任何可能的具体关系都成立的函数依赖。,4.2.2 函数依赖的一般概念(4),表4.6 关系r1,从例子可知,函数依赖与属性的语义有关。我们要根据属性的语义来确定一个函数依赖。例如SnameBirthday这个函数依赖,只有当关系中没有同姓名学生的条件下才成立。如果关系中允许出现相同姓名的学生,则出生日期就不再函数依赖于姓名了,即 SnameBirthday 数据库设计者应在定义数据库模式时,指明属性之间的函数依赖(主键),使数据库管理系统根据设计者的意图来维护数据库的完整性。因此,
15、设计者可以对现实世界中的一些数据依赖作强制性规定.,4.2.2 函数依赖的一般概念(5),4.2.2 函数依赖的一般概念(6),例如,为了使SnameBirthday这个函数依赖成立,我们在创建 基本表(Create Table)时,通过指定Sname为主键的方法强制规定关系中不允许同名同姓的人存在。这样当输入某个元组时,这个元组在Sname上的属性值必须满足以上规定。若发现新输入元组在Sname上的值与关系中已有元组在Sname上的值相同,则数据库管理系统就拒绝接受该元组。解决的办法是通过人工方式是同名者为不同名者。比如有两个张华,可改为“张华”,“张华b”等。,在定义4.1的基础上补充以下
16、常用术语和记号:若XY,则称X为这个函数依赖的决定(Determinant)因素,简称X是决定因素。若XY且YX,则记作XY。(3)若Y不函数依赖于X,则记作。例:Student(Sno,Sname,Ssex,Sage,Sdept)假设不允许重名,则有:Sno Ssex,Sno Sage,Sno Sdept,Sno Sname,Sname Ssex,Sname Sage,Sname Sdept但Ssex Sage,4.2.2 函数依赖的一般概念(7),若XY,且Y X,则称XY是平凡函数依赖。若XY,且(也就是Y中至少有一个属性不在X中),则称XY是非平凡函数依赖。例:在关系SC(Sno,Cn
17、o,Grade)中,非平凡函数依赖:(Sno,Cno)Grade 平凡函数依赖:(Sno,Cno)Sno(Sno,Cno)Cno对于任一关系模式,平凡函数依赖都是必然成立的,但它不反映新的语义。所以在后面的讨论中,若没有特别声明,“XY”都表示非平凡函数依赖。,4.2.2 函数依赖的一般概念(8),4.2.2 函数依赖的一般概念(8),定义4.2 设R(U)是属性集U=A1,A2,An上的关系模式。X和Y是U的子集。如果XY,且对于 X的任何一个真子集X,都有,则称Y对X完全函数依赖(Full Founctional Dependence)或者X完全决定Y,记作:XY。如果XY,但Y不是完全函
18、数依赖于X,则称Y对X部分函数依赖(Partial Founctional Dependence),记作:XY。例:在关系SC(Sno,Cno,Grade,Cname)中,由于:Sno Grade,Cno Grade,因此:(Sno,Cno)Grade(Sno,Cno)Cname,f,p,p,f,定义4.3 对于关系模式R(U),设X、Y和Z都是U的子集。如果XY,YZ,且,,则称Z对X传递函数依赖(Transitive Functional Dependence),记作:XZ。在传递函数依赖的定义中加上条件 是必要的,因为如果YX,则XY,即说明X与Y之间是一一对应的,这样导致Z对X的函数依
19、赖是直接依赖,而不是传递函数依赖。定义4.3中的条件 主要是强调XY和YZ都不是平凡函数依赖,否则同样Z对X是直接函数依赖,而不是传递函数依赖。例:在关系Std(Sno,Sdept,Mname)中,有:Sno Sdept,Sdept Mname Mname传递函数依赖于Sno 即:Mname Sno,4.2.2 函数依赖的一般概念(9),t,t,例4.4 关系模式StudyInfo(Sno,Sname,DeptName,DeptHead,Cname,Grade)有如下的一些函数依赖:SnoSname,Sno,CnameGrade,SnoDeptName,DeptNameDeptHead。由最后
20、两个函数依赖还可得出DeptHead传递函数依赖Sno,即 SnoDeptHead。如果没有同姓名的学生,还有SnoSname等。但显然有,。U=(Sno,Sname,DeptName,DeptHead,Cname,Grade)K=Sno,Cname 则KU,4.2.2 函数依赖的一般概念(10),t,t,f,4.2.3 候选键与主键(1),函数依赖的概念可更严格地定义关系模式的候选键与主键。定义4.4 对关系模式R(U),设KU。如果,则称K为R(U)的候选键或候选关键字(Candidate Key)。通常在R(U)的所有候选键中选定一个作为主键(Primary Key)。主键也称为主码或主
21、关键字。候选键是能够唯一确定关系中任何一个元组(实体)的最少属性集合,主键也是候选键,它是候选键中任意选定的一个。在最简单的情况,单个属性是候选键。最极端的情况是,关系模式的整个属性全体是候选键,也是主键,这时称为全键或全码(All-key)。,4.2.3 候选键与主键(2),例4.5 设有关系模式R(Teacher,Course,Sname),其属性Teacher,Course,Sname 分别表示教师,课程和学生。由于一个教师可以讲授多门课程,某一课程可由多个教师讲授。学生也可以选修不同教师讲授的不同课程,因此,这个关系模式的候选键只有一个,就是关系模式的全部属性(Teacher,Cour
22、se,Sname),即全键(All-key),它也是该关系模式的主键。为了便于区别候选键中的属性与其它属性,我们可以得到如下定义。,4.2.3 候选键与主键(3),定义4.5 对关系模式R(U),包含在任何一个候选键中的属性称为主属性(Primary Attribute),不包含在任何候选键中的属性称为非主属性(Nonprimary Attribute)或非码属性(Non-key Attribtute)。例4.6 在关系模式StudyInfo(Sno,Sname,DeptName,DeptHead,Cname,Grade)中,Sno,Cname是其唯一候选键,因此,Sno和Cname都是主属性
23、,而Sname,DeptName、DeptHead,Grade都是非主属性。定义4.6 对关系模式R(U),设XU。若X不是R(U)的主键,但X是另一个关系模式的主键,则称X是R(U)的外键或外部关键字(Foreign key)。,4.2.3 候选键与主键(4),例4.7 在Reports(Sno,Cname,Grade)中,Sno不是关系模式Reports的主键,但Sno是关系模式Students(Sno,Sname,DeptName)中的主键。因此,Sno是关系模式Reports(Sno,Cname,Grade)的外键。主键与外键提供了一个表示两个关系中元组(实体)之间联系的手段。在数据设
24、计中,经常人为地增加外键来表示两个关系中元组之间的联系。当两个关系进行连接操作时就是因为有外键在起作用。比如,我们需要查看每个学生的姓名、选课名称和成绩时,就涉及到Students(Sno,Sname,DeptName)和Reports(Sno,Cname,Grade)对应关系的连接操作,这时,只要使用第1章介绍的如下SQL命令即可。SELECT Sname,Cname,Grade FROM Students,Reports WHERE Students.Sno=Reports.Sno。,4.2.4 函数依赖的推理规则,在讨论函数依赖时会遇到这样的问题:已知关系模式R(U,F)的函数依赖集F=
25、AB,BC。问AC是否成立?其中属性集U=A,B,C。这是本节后面将讨论的有关问题,其内容安排如下:函数依赖的逻辑蕴涵 Armstrong公理系统 函数依赖推理规则的完备性 闭包的计算 函数依赖集的等价和覆盖,函数依赖的逻辑蕴涵(1),在介绍函数依赖的推理规则之前,先介绍两个函数依赖的逻辑蕴涵和闭包概念。定义4.7 对于满足函数依赖集F的关系模式R(U,F)的任意一个具体关系r,若函数依赖XY都成立(即对于r中的任意两个元组t,s,若tX=sX,则有tY=sY),则称F逻辑蕴涵XY,记为FXY。如F=AB,BC。FAC。(后面介绍)定义4.8 被函数依赖集F逻辑蕴涵的函数依赖所构成的集合,称为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 关系 模式 规范化
链接地址:https://www.31ppt.com/p-5985472.html