第5章关系数据理论.ppt
数据库原理与应用,人民邮电出版社,2,第5章 关系数据库规范化理论,什么是规范化理论?,部门表(部门号,部门名) 职工表(职工号,职工名,工资,部门号,工种),部门表(部门号,部门名) 职工表(职工号,职工名,工资) 工作表(职工号,部门号,工种),XX表(职工号,职工名,工资,部门号,部门名,工种),3,第5章 关系数据库规范化理论,5.1 函数依赖 5.1.1 函数依赖基本概念 5.1.2 一些术语和符号 5.1.3 为什么要讨论函数依赖 5.2 关系规范化 5.2.1 关系模式中的键 5.2.2 范式,4,5.1 函数依赖,针对一个实际应用业务,如何构造合适的关系模式,应构造几个关系模式,每个关系模式由哪些属性组成等,这些都是数据库设计问题,确切地讲是关系数据库的逻辑设计问题。 数据的语义不仅表现为完整性约束,对关系模式的设计也提出了一定的要求。,5,5.1.1 基本概念,省=f(城市):只要给出一个具体的城市值,就会有唯一一个省值和它对应, 如“武汉市”在“湖北省”,这里“城市”是自变量X,“省”是因变量或函数值Y。 把X函数决定Y,或Y函数依赖于X表示为: XY 如果有关系模式R(A1,A2,An),X和Y为A1,A2,An的子集,则对于关系R中的任意一个X值,都只有一个Y值与之对应,则称X函数决定Y,或Y函数依赖于X。,6,示例,例1:对学生关系模式 Student(Sno, SName, Sdept, Sage) 有以下依赖关系:,SnoSName, SnoSdept, SnoSage,例2: SC(Sno, Cno, Grade),(Sno, Cno)Grade,7,函数依赖定义,设有关系模式R(A1,A2,An),X和Y均为A1,A2,An的子集,r是R的任一具体关系,t1、t2是r中的任意两个元组; 如果由t1X=t2X可以推导出t1Y=t2Y,则称X函数决定Y,或Y函数依赖于X,记为XY。 在以上定义中特别要注意,只要 t1X=t2X t1Y=t2Y成立,就有XY。也就是说只有当t1X=t2X为真,而t1Y=t2Y为假时,函数依赖XY不成立;而当t1X=t2X为假时,不管t1Y=t2Y为真或为假,都有XY成立。,8,5.1.2 一些术语和符号,(1)如果XY,但Y不包含于X,则称 XY是非平凡的函数依赖。 (2)如果XY,但Y包含于X,则称 XY是平凡的函数依赖。 若无特别声明,我们讨论的都是非平凡的函数依赖。 (3)如果XY,则X称为决定因子。 (4)如果XY,并且YX,则记作 XY。,9,术语和符号(续),(5)如果XY,并且对于X的一个任意真子集X都有 ,则称Y完全函数依赖于X,记作 ;如果 成立,则称Y部分函数依赖于X,记作,10,示例,例1:有关系模式SC(Sno,Sname,Cno,Credit,Grade),主键为(Sno, Cno),则函数依赖关系有:,11,术语和符号(续),(6)如果XY(非平凡函数依赖,并且 )、YZ,则称Z传递函数依赖于X。,12,示例,例2:有关系模式S(Sno,Sname,Dept,Dept_master),各属性分别为:学号、姓名、所在系和系主任(假设一个系只有一个主任),主键为Sno,则函数依赖关系有:,13,5.1.3 为什么要讨论函数依赖?,14,存在问题,数据冗余问题 数据更新问题 数据插入问题 数据删除问题,15,结论,此关系模式不是一个好的模式。 “好”的模式: 不会发生插入异常、删除异常、更新异常, 数据冗余应尽可能少。 原因:由存在于模式中的某些数据依赖引起 解决方法:通过分解关系模式来消除其中不合适的数据依赖,16,5.2 关系规范化,关系规范化是指导将有“不良”函数依赖的关系模式转换为良好的关系模式的理论。 这里涉及到范式的概念,不同的范式表示关系模式遵守的不同的规则。,17,5.2.1 关系模式中的键,候选键:设K为R (U,F)中的属性或属性组,若K完全决定U,则K为R的候选键。 主键:关系R (U,F)中可能有多个候选键,则选其中一个作为主键。 全键:候选键为整个属性组。 包含在任一候选键中的属性称为主属性,不包含在任一候选键中的属性称为非主属性。,18,示例,例1:学生表(学号,姓名,性别,身份证号,年龄,所在系) 候选键:学号,身份证号,主键:学号或身份证号 主属性:学号,身份证号 例2:学生选课表(学号,课程号,考试次数,成绩) 候选键:(学号,课程号,考试次数),也为主键 主属性:学号,课程号,考试次数,非主属性:成绩 例3:教师_课程表(教师号,课程号,学年) 候选键:(教师号,课程号,学年 ),也为主键 主属性:教师号,课程号,学年,非主属性:无 是全键表,19,5.2.1 关系模式中的键(续),外键:用于关系表之间建立关联的属性(组)。 定义:若R(U,F)的属性(组)X(X属于U)是另一个关系S的主键,则称X为R的外键。(X必须先被定义为S的主键。),20,5.2.2 范式,关系数据库中的关系要满足一定的要求,满足不同程度要求的为不不同的范式(Normal Form)。 范式的种类: 第一范式(1NF) 第二范式(2NF) 第三范式(3NF),21,第一范式,第一范式(1NF):不包含重复组的关系,22,第二范式,第二范式(2NF) :如果R(U,F)1NF,并且R中的每个非主属性都完全函数依赖于主键,则R(U,F)2NF。,例: 有关系模式: S-L-C(Sno,Sname,Ssex,Sdept,Sloc,Cno,Grade),(Sno,Cno)是主键,且SnoSname, 因此(Sno,Cno) Sname,不是第二范式,23,分解方法,(1)用组成主键的属性集合的每一个子集作为主键构成一个表。 (2)将依赖于这些主键的属性放置到相应的表中。 (3)最后去掉只由主键的子集构成的表。,24,分解S-L-C表,(1)将该表分解为如下的三张表(下划线部分表示主键): S-L(Sno,) C(Cno,) S-C(Sno, Cno,),例: 对于上面的关系模式 S-L-C(Sno,Sname,Ssex,Sdept,Sloc,Cno,Grade),25,分解S-L-C表(续),(2)将依赖于这些主键的属性放置到相应的表中,形成如下三张表: S-L(Sno,Sname, Ssex, Sdept, Sloc) C(Cno) S-C(Sno, Cno, Grade) (3)去掉只由主键的子集构成的表,也就是去掉C(Cno)表。S-L-C关系模式最终被分解的形式为: S-L(Sno, Sname, Ssex, Sdept, Sloc) S-C(Sno, Cno, Grade),26,分解后的函数依赖关系,分解后的关系模式的函数依赖关系: S-L:SnoSdept,Sno Sname SnoSsex, SnoSLOC 是2NF S-C:(Sno, Cno)Grade:是2NF,f,f,f,f,f,27,S-L关系模式存在问题,28,第三范式,第三范式(3NF):如果R(U,F )2NF,并且所有非主属性都不传递依赖于主键,则R(U,F )3NF。,对S-L(Sno,Sname,Ssex,Sdept,SLOC) SnoSdept,SdeptSloc Sno传递SLOC, 不是3NF,29,分解方法,(1)对于不是候选键的每个决定因子,从表中删去依赖于它的所有属性。 (2)新建一个表,新表中包含原表中所有依赖于该决定因子的属性。 (3)将决定因子作为新表的主键。,30,分解S-L关系模式,S-L分解后的关系模式如下: S-D( Sno, Sname, Ssex, Sdept),主键为Sno。 S-L( Sdept, Sloc),主键为Sdept。,S-L(Sno,Sname,Ssex,Sdept,SLOC),31,小结,规范化的过程实际上是通过把范式程度低的关系模式分解为若干个范式程度高的关系模式来实现的。 分解的最终目的是使每个规范化的关系只描述一个主题。 如果某个关系描述了两个或多个主题,则它就应该被分解为多个关系,使每个关系只描述一个主题。,32,小结(续),规范化的方法是进行模式分解,且确保分解后产生的模式与原模式等价, 即模式分解不能破坏原来的语义,同时还要保证不丢失原来的函数依赖关系。,