1、数据库原理与应用教程(第4版)国家“十一五”规划教材第6章 关系数据库规范化理论6.1 6.1 函数依赖函数依赖6.1.16.1.1函数依赖基本概念函数依赖基本概念6.1.26.1.2一些术语和符号一些术语和符号6.1.3 6.1.3 为什么要讨论函数依赖为什么要讨论函数依赖 6.2 6.2 关系规范化关系规范化 6.2.1 6.2.1 关系模式中的码关系模式中的码6.2.2 6.2.2 范式范式 6.1 一些数据语义问题数数据据的的语语义义不不仅仅表表现现为为完完整整性性约约束束,对对关系模式的设计也提出了一定的要求。关系模式的设计也提出了一定的要求。如如何何构构造造一一个个合合适适的的关关
2、系系模模式式,应应构构造造几几个个关关系系模模式式,每每个个关关系系模模式式由由哪哪些些属属性性组组成成等等,都都是是数数据据库库设设计计问问题题,确确切切地讲是关系数据库的逻辑设计问题。地讲是关系数据库的逻辑设计问题。6.1.1函数依赖基本概念 省省=f f(城市城市):只要给出一个具体的城市值,就会有唯:只要给出一个具体的城市值,就会有唯一一个省值和它对应,一一个省值和它对应,如如“武汉市武汉市”在在“湖北省湖北省”,这里,这里“城市城市”是自变是自变量量X X,“省省”是因变量或函数值是因变量或函数值Y Y。把把X X函数决定函数决定Y Y,或,或Y Y函数依赖于函数依赖于X X表示为:
3、表示为:X XY Y如果有关系模式如果有关系模式R R(A1A1,A2A2,AnAn),X X和和Y Y为为 A1A1,A2A2,AnAn 的子集,则对于关系的子集,则对于关系R R中的任意一个中的任意一个X X值,都只有值,都只有一个一个Y Y值与之对应,则称值与之对应,则称X X函数决定函数决定Y Y,或,或Y Y函数依赖函数依赖于于X X。示例例1:对学生关系模式 Student(Sno,Sname,Sdept,Sage)有以下依赖关系:SnoSname,SnoSdept,SnoSage例2:SC(Sno,Cno,Grade)(Sno,Cno)Grade函数依赖定义设有关系模式设有关系模
4、式R R(A1A1,A2A2,AnAn),X X和和Y Y均为均为 A1A1,A2A2,AnAn 的的子集,子集,r r是是R R的任一具体关系,的任一具体关系,t1t1、t2t2是是r r中的任意两个元组;中的任意两个元组;如果由如果由t1t1 X X=t2t2 X X 可以推导出可以推导出t1t1 Y Y=t2t2 Y Y,则称,则称X X函数决定函数决定Y Y,或,或Y Y函数依赖于函数依赖于X X,记为,记为X XY Y。在以上定义中特别要注意,只要在以上定义中特别要注意,只要 t1 t1 X X=t2t2 X X t1t1 Y Y=t2t2 Y Y 成立,就有成立,就有X XY Y。
5、也就是说只有当。也就是说只有当t1t1 X X=t2t2 X X 为真,而为真,而t1t1 Y Y=t2t2 Y Y 为假时,函数依赖为假时,函数依赖X XY Y不成立;而当不成立;而当t1t1 X X=t2t2 X X 为假时,不管为假时,不管t1t1 Y Y=t2t2 Y Y 为真或为假,都有为真或为假,都有X XY Y成立。成立。6.1.2 一些术语和符号 1.如果XY,但Y不包含于X,则称XY是非平凡的函数依赖。2.如果XY,但Y包含于X,则称XY是平凡的函数依赖。若无特别声明,我们讨论的都是非平凡的函数依赖。术语和符号(续)3.如果XY,则X称为决定因子。4.如果XY,并且YX,则记
6、作XY。术语和符号(续)如果XY,并且对于X的一个任意真子集X 都有X/Y,则称Y完全函数依赖于X,并记作:如果XY(非平凡函数依赖,并且Y/X)、YZ,则称Z传递函数依赖于X,记作:如果XY成立,并且对于X的某个真子集X 有XY成立,则称Y部分函数依赖于X,并记作:示例例例1 1:有关系模式:有关系模式SCSC(Sno,Sname,Cno,Credit,GraSno,Sname,Cno,Credit,Gradede),主码为(),主码为(Sno,CnoSno,Cno),则函数依赖关系有:),则函数依赖关系有:示例例例2 2:假设有关系模式:假设有关系模式S S(Sno,Sname,Dept,
7、Dept_masterSno,Sname,Dept,Dept_master),其中各属性分),其中各属性分别为:学号、姓名、所在系和系主任(假设一个别为:学号、姓名、所在系和系主任(假设一个系只有一个主任),主码为系只有一个主任),主码为SnoSno,则函数依赖关系,则函数依赖关系有:有:6.1.3 为什么要讨论函数依赖?有关系模式:S-L-C(Sno,Sdept,SLOC,Cno,Grade)SnoSnoSnameSnameSsexSsexSdeptSdeptSlocSlocCnoCnoGradeGrade95121019512101李勇李勇男男计算机系计算机系2 2公寓公寓c01c0190
8、9095121019512101李勇李勇男男计算机系计算机系2 2公寓公寓c02c02868695121019512101李勇李勇男男计算机系计算机系2 2公寓公寓c06c06NULLNULL95121029512102刘晨刘晨男男计算机系计算机系2 2公寓公寓c02c02787895121029512102刘晨刘晨男男计算机系计算机系2 2公寓公寓c04c04666695211029521102吴宾吴宾女女信息系信息系1 1公寓公寓c01c01828295211029521102吴宾吴宾女女信息系信息系1 1公寓公寓c02c02757595211029521102吴宾吴宾女女信息系信息系1
9、1公寓公寓c04c04 92 9295211029521102吴宾吴宾女女信息系信息系1 1公寓公寓c05c05 50 5095211039521103张海张海男男信息系信息系1 1公寓公寓c02c02686895211039521103张海张海男男信息系信息系1 1公寓公寓c06c06NULLNULL95311019531101钱小平钱小平女女数学系数学系1 1公寓公寓c01c01808095311019531101钱小平钱小平女女数学系数学系1 1公寓公寓c05c059595存在问题数据冗余问题 数据更新问题 数据插入问题 数据删除问题结论Student关系模式不是一个好的模式。“好”的模
10、式:不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少。原因:由存在于模式中的某些数据依赖引起解决方法:通过分解关系模式来消除其中不合适的数据依赖6.2 关系规范化关系规范化是指导将有“不良”函数依赖的关系模式转换为良好的关系模式的理论。这里涉及到范式的概念,不同的范式表示关系模式遵守的不同的规则。6.2.1 关系模式中的码 候选码:设K为R(U,F)中的属性或属性组,若K完全决定U,则K为R的候选码。主码:关系R(U,F)中可能有多个候选码,则选其中一个作为主码。全码:候选码为整个属性组。包含在任一候选码中的属性称为主属性,不包含在任一候选码中的属性称为非主属性。示例例1:学生(学号,
11、姓名,性别,身份证号,年龄,所在系)候选码:学号,身份证号。主码:“学号”或“身份证号”。主属性:学号,身份证号。非主属性:姓名,性别,年龄,所在系。示例例2有关系模式:选课(学号,课程号,考试次数,成绩)设一个学生对一门课程可以有多次考试,每一次考试有一个考试成绩。候选码:(学号,课程号,考试次数),也为主码。主属性:学号,课程号,考试次数非主属性:成绩。示例例例3 3有关系模式:授课(教师号,课程号,学年)有关系模式:授课(教师号,课程号,学年)语义:一个教师在一个学年可以讲授多门不同的课程,可语义:一个教师在一个学年可以讲授多门不同的课程,可以在不同学年对同一门课程讲授多次,但不能在同一
12、个学以在不同学年对同一门课程讲授多次,但不能在同一个学年对同一门课程讲授多次。一门课程在一个学年可以由多年对同一门课程讲授多次。一门课程在一个学年可以由多个不同的教师讲授,同一个学年可以开设多门课程,同一个不同的教师讲授,同一个学年可以开设多门课程,同一门课程可以在不同学年开设多次。门课程可以在不同学年开设多次。候选码候选码:(教师号,课程号,学年。:(教师号,课程号,学年。主码主码:同:同候选码。候选码。主属性主属性:教师号,课程号,学年。:教师号,课程号,学年。非主属性非主属性:没有:没有是是全码表全码表。外码外码:用于关系表之间建立关联的属性(组)。定义:关系模式R中属性(组)X不一定是
13、R中的码,但X是另一个关系模式S的候选码(通常为主码),则称X为R的外码。6.2.2 范式关系数据库中的关系要满足一定的要求,满足不同程度要求的为不不同的范式(Normal Form)。范式的种类:第一范式(1NF)第二范式(2NF)第三范式(3NF)第一范式第一范式(1NF):不包含重复组的关系第二范式第二范式(2NF):如果R(U,F)1NF,并且R中的每个非主属性都完全函数依赖于主码,则R(U,F)2NF。例:S-L-C(Sno,Sdept,SLOC,Cno,Grade)因为有:SnoSLOC,因此存在部分函数依赖,该表不是2NF。分解方法首先,对于组成主码的属性集合的每一个子集,用它作
14、为主码构成一个表。然后,将依赖于这些主码的属性放置到相应的表中。最后,去掉只由主码的子集构成的表。分解S-L-C表对S-L-C(Sno,Sdept,SLOC,Cno,Grade)首先分解为如下形式的三张表:S-L(Sno,)C(Cno,)S-C(Sno,Cno,)分解S-L-C表(续)然后,将依赖于这些主码的属性放置到相应的表中,形成如下三张表:S-L(Sno,Sdept,Sloc)C(Cno)S-C(Sno,Cno,Grade)分解S-L-C表(续)最后,去掉只由主码的子集构成的表。S-L-C关系模式最终分解的形式为:S-L(Sno,Sdept,Sloc)S-C(Sno,Cno,Grade)
15、分解后的函数依赖关系分解后的关系模式的函数依赖关系:S-L:Snof fSdept,Snof fSLOC 是2NFS-C:(Sno,Cno)f fGrade:是2NF S-L(Sno,Sdept,SLOC)存在问题数据冗余:有多少个学生就有多少个重复的Sdept和SLOC;插入异常:当新建一个系时,若还没有招收学生,则无法插入;第三范式第三范式(3NF):如果R(U,F)2NF,并且所有非主属性都不传递依赖于主码,则R(U,F)3NF。S-L(Sno,Sdept,SLOC)Sno传递传递SLOC,不是3NF分解方法(1)对于不是候选码的每个决定因子,从表中删去依赖于它的所有属性;(2)新建一个
16、表,新表中包含在原表中所有依赖于该决定因子的属性;(3)将决定因子作为新表的主码。分解S-L关系模式S-L分解后的关系模式为:S-D(Sno,Sdept)S-L(Sdept,Sloc)S-L-CS-L-C(Sno,Sname,Ssex,Sdept,Sloc,Cno,GradeSno,Sname,Ssex,Sdept,Sloc,Cno,Grade)共分解为如下三个关系模式,每个关系模式都是共分解为如下三个关系模式,每个关系模式都是3NF3NF的。的。S-DS-D(SnoSno,Sname,Ssex,Sdept,Sname,Ssex,Sdept),SdeptSdept为引用为引用S-S-L L关系模式的外码。关系模式的外码。S-LS-L(SdeptSdept,Sloc,Sloc),没有外码。,没有外码。S-CS-C(Sno,CnoSno,Cno,Grade,Grade),SnoSno为引用为引用S-S-D D关系模式的外码。关系模式的外码。