1.1数据库系统原理数据依赖对关系数据库的影响函数依赖关系模式的范式关系模式的规范化数据依赖的公理系统1.2数据库系统原理数据依赖对关系模式的影响关系模式设计不规范会带来一系列的问题数据冗余、更新异常、插入异常、删除异常示例1:关系模式R(Tname,Addr,C#,Cname)一个教师只有一个地址(户口所在地)一个教师可教多门课程一门课程只有一个任课教师因此R的主码是(C#)1.3数据库系统原理R的一个实例TnameAddrC#CnameT1A1C1N1T1A1C2N2T1A1C3N3T2A2C4N4T2A2C5N5T3A3C6N61.4数据库系统原理问题(1):数据冗余教师T1教了三门课程,他的地址被重复存储了2次。TnameAddrC#CnameT1A1C1N1T1A1C2N2T1A1C3N3T2A2C4N4T2A2C5N5T3A3C6N61.5数据库系统原理问题(2):更新异常如果T1的地址变了,则需要改变3个元组的地址;若有一个未更改,就会出现数据不一致。但DBMS无法获知这种不一致。TnameAddrC#CnameT1A1C1N1T1A1C2N2T1A1C3N3T2A2C4N4T2A2C5N5T3A3C6N61.6数据库系统原理问题(3):插入异常如果要增加一名教师,但他还未带课,则C#和Cname为空,但由于C#是主码,为空违反了实体完整性,所以这名教师将无法插入到数据库中。TnameAddrC#CnameT1A1C1N1T1A1C2N2T1A1C3N3T2A2C4N4T2A2C5N5T3A3C6N61.7数据库系统原理问题(4):删除异常如果教师T3现在不带课了,则需将T3的元组删去,但同时也把他的姓名和地址信息删掉了。TnameAddrC#CnameT1A1C1N1T1A1C2N2T1A1C3N3T2A2C4N4T2A2C5N5T3A3C6N61.8数据库系统原理如何解决?方法:模式分解方法1:R分解为R1(Tname,Addr)R2(C#,Cname)方法2R1(Tname,Addr,C#)R2(C#,Cname)方法3R1(Tname,Addr)R2(Tname,C#,Cname)授课信息丢失了R1中问题依然存在基本解决问题1.9数据库系统原理示例2:描述学校的数据库:学生的学号(Sno)、所在系(Sdept)系主任姓名(Mname)、课程名(Cname),成绩(Grade)单一的关系模式:StudentU、F其中:U={Sno,Sdept,Mname,Cname,Grade}F={Sno→Sdept,Sdept→Mname,(Sno,Cname)→Grade}1.10数据库系统原理数据依赖对关系模式的影响(续)学校数据库的语义:⒈一个系有若干学生,一个学生只属于一个系;⒉一个系只有一名主任;⒊一个学生可以选修多门课程,每门课程有若干学生选修;⒋每个学生所学的每门课程都有一个成绩。1.11数据库系统原理SnoCnameGradeSdeptMnameStudent关系模式上的一组函数依赖1.12数据库系统原理关系模式StudentU,F中存在的问题⒈数据冗余太大浪费大量的存储空间例:每一个系主任的姓名重复出现⒉更新异常(UpdateAnomalies)数据冗余,更新数据时,维护数据完整性代价大。例:某系更换系主任后,系统必须修改与该系学生有关的每一个元组1.13数据库系统原理关系模式StudentU,F中存在的问题⒊插入异常(InsertionAnomalies)该插的数据插不进去例,如果一个系刚成立,尚无学生,我们就无法把这个系及其系主任的信息存入数据库。⒋删除异常(DeletionAnomalies)不该删除的数据不得不删例,如果某个系的学生全部毕业了,我们在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。1.14数据库系统原理数据依赖对关系模式的影响(续)结论:Student关系模式不是一个好的模式。“好”的模式不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少。原因:由存在于模式中的某些数据依赖引起的解决方法:通过分解关系模式来消除其中不合适的数据依赖。1.15数据库系统原理规范化理论规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。1.16数据库系统原理要解决的内容到底什么样的模式才最佳?怎么分解才能达到要求?标准是什么?如何实现?1.17数据库系统原理函数依赖关系模式是对关系的描述,它由五部分组成:R(U,D,Dom,F)R为关系模式名;U是一个属性集;D是U中属性的值所来自的域;Dom是属性向域的映射集合;F是属性间的依赖关系。1.18数据库系统原理函数依赖定义11.1设R(U)是一个关系模式,U是R的属性集合,X和Y是U的子集。对于R(U)的任意一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同,而在Y上的属性值不同,则称“X函数确定Y”或“Y函数依赖于X”,记做X→Y。1.19数据库系统原理函数依赖换一种说法:设关系模式R(A1,A2,…,An)或简记为R(U),U是R的属性集合,X和Y是U的子集。r是R的任意一个实例(关系),若r的任意两个元组t1、t2,由t1[X]=t2[X]可导致t1[Y]=t2[Y],即如果X相等则Y也相等,则称Y函数依赖于X或称为X函数决定Y,记作X→Y。1.20数据库系统原理函数依赖即R的X属性集上的值可唯一决定R的Y属性集上的值。也即对于R的任意两个元组,X上的值相等,则Y上的值也必相等。1.21数据库系统原理重要说明1.函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。2.函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立。1.22数据库系统原理函数依赖3.若XY,则X叫做决定因素。4.若XY,YX,则记做XY。5.若Y不函数依赖于X,则记做XY。1.23数据库系统原理完全函数依赖与部分函数依赖定义11.2在R(U)中,如果XY,并且对于X的任何一个真子集X’,都有X’Y,则称Y完全函数依赖于X,记做XY。否则称称Y部分函数依赖于X。记做XY。在[例1]中(Sno,Cname)Grade是完全函数依赖;(Sno,Cname)Sdept是部分函数依赖;PFF1.24数据库系统原理传递函数依赖定义11.3在关系模式R(U)中,如果XY,YZ,且YX,YX,则称Z传递函数依赖于X,记作XZ。在[例1]中Sno→Sdept,Sdept→Mname成立,所以Sno→Mname传递函数定义中YX是必须的,因为如果YX,则XY,这实际上是Z直接依赖于X,而不是传递函数依赖了。1.25数据库系统原理传递函数依赖例如,在关系Student(Sno,Sname,Ssex,Sage,Sdept)中,有SnoSsex,SnoSage,SnoSdept,SnoSname(无重名),但SsexSage。1.26数据库系统原理传递函数依赖在关系SC(Sno,Cno,Grade)中,有SnoGrade,CnoGrade,(Sno,Cno)Grade,(Sno,Cno)是决定属性集。在关系Std(Sno,Sdept,Mname)中,有SnoSdept,SdeptMname,SnoMname。传递F1.27数据库系统原理函数依赖的多对一关系函数依赖实际上是指一个关系模式中一个属性集和另一个属性集间的多对一关系例如选课关系SC(S#,C#,Score)存在由属性集{S#,C#}到属性集{Score}的函数依赖对于任意给定的S#值和C#值,只有一个Score值与其对应反过来,可以存在多个S#值和C#值,它们对应的Score值相等1.28数据库系统原理函数依赖FD是否成立,唯一办法是仔细考察应用中属性的含义。FD实际上是对现实世界的断言。数据库设计者在设计时把应遵守的函数依赖告知DBMS,则DBMS会自动检查关系的合法性。1.29数据库系统原理函数依赖例如Student关系模式中,{S#}→{Sname}(单个属性可去掉括号,简写成S#→Sname)SC关系模式中,{S#,C#}→{Score}对于关系模式R(Tname,Addr,C#,Cname)若一门课只能有一个教师,则有{C#}→{Tname}若一门课可有多个教师任教,则有{C#}→{Tname}不成立因此FD是与具体应用相关的。1.30数据库系统原理码定义11.4:设K为关系模式R(U,F)中的属性或属性集合,若KU,则K为R的候选码(CandidateKey)。若候选码多于一个,则选定其中一个为主码(PrimaryKey)。主属性、非主属性、全码。定义11.5:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外码。F1.31数据库系统原理码码是关系模式中的一个重要概念。候选码能够唯一地标识关系的元组;是关系模式中一组最重要的属性。主码又和外码一起提供了一个表示关系间联系的手段。1.32数据库系统原理码例:R(Tname,Addr,C#,Cname)F={Tname→Addr,C#→Cname,C#→Tname}C#→{Tname,Addr,C#,Cname}所以C#是候选码,若C#→Tname不成立,则候选码为{Tname,C#}1.33数据库系统原理范式(NormalForm)范式:满足特定要求的模式不同级别的范式要求各不相同范式可以作为衡量一个关系模式好坏的标准若关系模式R满足范式xNF,记RxNF规范化:将低一级范式的关系模式通过模式分解转换为高一级范式的关系模式集合的过程5NF4NFBCNF3NF2NF1NF1971~1972,E.F.Codd1974,BoyceandCodd1976~1979,Fagin1.34数据库系统原理第一范式(1NF)定义11.6如果一个关系模式R的所有属性都是不可分的基本数据项,(即对于关系模式R的任一实例,其元组的每一个属性值都只含有一个值),则R1NF。1NF是关系的基本要求,否则不能称其为关系数据库。1.35数据库系统原理第一范式(1NF)-例满足第一范式的关系模式并不一定是一个好的关系模式。如:SLC(Sno,Sdept,Sloc,Cno,Grade)码为(Sno,Cno)1.36数据库系统原理第一范式(1NF)-例函数依赖包括:(Sno,Cno)→GradeSno→Sdept(Sno,Cno)→SdeptSno→Sloc(Sno,Cno)→SlocSdept→Sloc(因为每个系只住在一个地方)fpp1.37数据库系统原理SnoCnoGradeSdeptSlocSLC关系模式上的一组函数依赖1.38数据库系统原理第一范式(1NF)-例对前例分析:非主属性Sdept和Sloc部分函数依赖于码(Sno,Cno)。SLC关系存在数据冗余、更新异常、插入异常、删除异常4个问题。因此SLC不是一个好的关系模式。应消除部分函数依赖,可用投影分解法分解为两个关系模式:1.39数据库系统原理第一范式(1NF)-例SC(Sno,Cno,Grade)SL(Sno,Sdept,Sloc)依赖关系为:(Sno,Cno)→GradeSno→SdeptSno→Sloc显然,分解后非主属性都完全函数依赖于码了,使以上4个问题得到一定解决,SC,SL属于2NF。1.40数据库系统原理第二范式(2NF)定义11.7:若关系模式R1NF,且每一非主属性完全函数依赖于R的码,则R2NF。2NF含义:R(A,B,C,D,E),{A,B}为主码,则有A,B→C,A,B→D,A,B→E但C、D、E都不局部函数依赖于A,B即A→C、B→C、A→D、