资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
第 4 章 关系模型的基本理论 1第 4 章 关系模型的基本理论4.3 关系数据库的规范化方法4.3.3 函数依赖与范式一、1NF(第一范式)定义:若关系模式 R 的每一个分量是不可再分的数据项,则 R1NF。理解:关系 R 消除了行合并和列合并的情况后,则成为 1NF。举例:学生综合信息表毛病: 数据冗余大:每当有学生选一门课程时,表中重复出现该学生全部信息和所在学院信息,实际上有些信息只需存储一次就够了。 修改麻烦:数据冗余大必然造成修改麻烦,例如学一改换了学院,从计算机学院调到经管学院,则需从整个关系中逐一找到其对应的元组进行修改,若漏改一处则造成数据矛盾。 插入异常:本表的关键字是由学号和课程名组合而成的,两者取值都不允许是空值。这样,若有一新学生来报道。会由于他没有选修任何一门课程而无法将其信息插入表中,这样就形成了插入异常。第 4 章 关系模型的基本理论 2 删除异常:插入异常的反面就是删除异常。在表中,若删除学三,则整个元组不复存在,连同经管学院的院长是李四这一信息也会一并删掉,这样会引起信息丢失。原因:表不够规范,即限制太少,造成表中存放的信息太杂,其依赖关系为:完全函数依赖:(学号,课程名)成绩。部分函数依赖:学号姓名,学院传递函数依赖:学号学院 院长非关键字为决定因素:任课教师 课程名改进:消除同时存在于一个关系中属性间不同的依赖情况,也就是使一个关系表示的信息单纯一些。二、2NF(第二范式)定义:若 R 1NF,且每一个非主属性完全函数依赖于码,则 R 2NF。理解:当 1NF 消除了非主属性对码的部分函数依赖,则成为 2NF。分解:将部分函数依赖单独提取出来,把一个 1NF 表无损分解为 2 个2NF 表。注:所谓无损是无损连接和保持依赖。下例将学生综合信息表分解为学生学院信息表和学生成绩任课教师表。学生学院信息表 学生成绩任课教师表毛病: 数据冗余大:计算机学院及张三重复了二次。 修改麻烦:若计算机学院院长更换了,刚必须重复修改每个计算机学院学生的信息,若漏改一处则造成数据矛盾。 插入异常:如果新开设一个学院,会因为没有招生而不能插入相应的信息。 删除异常:若删除学三,则整个元组不复存在,连同经管学院方面的信息一并删掉,这样会引起信息丢失。原因:学生信息表中存在传递函数依赖。第 4 章 关系模型的基本理论 3三、3NF(第三范式)定义:若 R 2NF,且每一个非主属性都不传递依赖于码,则 R 3NF。理解:当 2NF 消除了非主属性对码的传递函数依赖,则成为 3NF。分解:将传递函数依赖单独提取出来,把一个 2NF 表无损分解为 2 个3NF 表。下例将学生学院信息表分解为学生信息表和学院信息表。学生信息表 学院信息表毛病: 数据冗余大:张华任英语老师这一信息重复了二次。 修改麻烦:若张华所带的英语课程更换老师,刚必须重复修改其所班级每个学生对应的任课教师的名字,若漏改一处则造成数据矛盾。 插入异常:。如果新来了一个英语老师,会因为没有学生选课而不能插入相应的信息。 删除异常:若删除 02 号的高等数学成绩,则整个元组不复存在,连同马军是高等数学的任课教师的信息一并删掉,这样会引起信息丢失。原因:学生成绩表中存在作为非主码的“任课教师”是决定因素。四、BCNF定义:若 R 3NF,且关系中每个决定因素都是码,则 R BCNF。理解:当 3NF 消除了非主属性作为决定因素的函数依赖,则成为 BCNF,或者说删除了非主属性之间的函数依赖,则成为 BCNF。分解:将非主属性间的函数依赖单独提取出来,把一个 3NF 表无损分解为 2 个 BCNF 表。下列将学生成绩任课教师表分解为学生成绩表和任课教师表学生成绩表 任课教师表第 4 章 关系模型的基本理论 44.3.4 模式分解一、模式分解的原则所谓模式分解就是将一个关系模式分解成若干个模式,分解后的模式具有下面三个特征: 分解后的模式均为高一级的模式。 分解后关系中的数据不会丢失,即分解后的关系再经连接后能恢复到原来的关系,这叫无损连接。 分解后关系中的函数依赖不会丢失,这叫依赖保持。二、模式分解的步骤 确定关系的属性集和依赖集。 找出候选码。A. 找出所有的左属性集(只出现在依赖左边的属性),所有的右属性集(只出现在依赖右边的属性),所有的左右属性集(既出现在左边也出现在右边的属性),所有非左非右属性集(既不出现在左边也不出现在右边的属性)。B. 找出候选码:看左属性是否可以做为唯一个候选码(检验左属性是否可以决定所有其它属性),如果不行,再与左右属性集中的每一个属性联合起来,看是否可以做为候选码(如果左右属性集中的属性不只一个,就可能有多个候选码),如果有非左非右属性,在候选码中要加这些属性。 多步分解,达到 BCNF。A. 首先非主属性是否有部分函数依赖,若有表示不符合 2NF,分解成2NF。B. 再检查非主属性是否有传递函数依赖,若有表示不符合 3NF,分解成3NF。C. 再检查非主属性中是否有决定因素的属性,若有表示不符合 BCNF,分解成 BCNF。三、模式分解的举例 1关系模式 SCG(Sno,Sname,Ssub,Sdept,Cno,Grade),其中 Sno-学号、Sname-姓名、Ssub- 专业、Sdept-学生所在系、 Cno-课程号、Grade-成绩,该关系模式有如下语义信息: 每个学生均只属于一个系与一个专业。 每个学生修读的每门课有且仅有一个成绩。 各系无相同专业。解: 确定关系的属性集和依赖集根据上面的语义信息及其它的一些基本常识,可以得到如下的函数依赖:第 4 章 关系模型的基本理论 5SnoSname,Sno Ssub,SnoSdept,SsubSdept,(Sno,Cno)Grade,因此关系模式可以写成:SCG(Sno,Sname,Ssub,Sdept,Cno, Grade , SnoSname,SnoSsub,SnoSdept,Ssub Sdept ,(Sno,Cno)Grade ) 找出候选码L 属性集:Sno,CnoR 属性集:Sname,Sdept,GradeLR 属性集:SsubNLR 属性集:(Sno,Cno)+=Sname,Ssub,Sdept;Grade,则左属性集可以决定所有其它属性,则左属性集是唯一的候选码。 检验是否达到 2NFA. 检验 SCG 是否满足 2NF:SCG 中非主属性 Sname,Ssub ,Sdept 都只部分依赖候选码(Sno,Cno)中的 Sno,即存在部分依赖,不满足 2NF。B. 分解为 2NF:将完全函数依赖的相关属性组成一个关系 SCG1,其它相关属性组成另一个关系 SCG2,如下:SCG1(Sno,CNo,Grade,(Sno,Cno)Grade)SCG2(Sno,Sname,Ssub,Sdept, SnoSname,SnoSsub,SnoSdept,Ssub Sdept)C. 检验分解后的关系是否满足 2NF:SCG1 中显然候选码为(Sno,Cno),非主属性 Grade 完全函数依赖(Sno,Cno),故为 2NF。SCG2 中显然候选码为 Sno,且只有一个属性,所以肯定不会存在非主属性对码的部分函数依赖,即为 2NF。 检验是否达到 3NFA. 检验 SCG1 和 SCG2 是否满足 3NF:SCG1 中只有一个函数依赖,显然不会存在传递函数依赖,故为 3NF。SCG2 中存在 SnoSsubSdept,即存在传递函数依赖,不符合 3NF。B. 分解为 3NF:将 SCG2 中引起传递函数依赖的相关属性组成一个关系SCG21,其它相关属性组成另一个关系 SCG22,如下:SCG21(Ssub,Sdept , SsubSdept )SCG22(Sno,Sname,Ssub , SnoSname,SnoSsub)C. 检验分解后的关系是否满足 3NF:SCG21 中只有一个函数,显然不会存在传递函数依赖,故为 3NF。SCG2 中虽然多个函数依赖,但也没有传递函数依赖,故为 3NF。 检验是否达到 BCNF第 4 章 关系模型的基本理论 6A. 检验 SCG1、SCG21 和 SCG22 是否达到 BCNF:SCG1 、SCG21 和SCG22 中均没有起决定因素的非主属性,显然满足 BCNF。四、模式分解的举例 2关系模式 R(Sno, Cno, Tno),其中 Sno-学号、Cno- 课程号、Tno-教师号,该关系模式有如下语义信息: 每个教师仅上一门课。 学生与课程确定后,教师即唯一确定。解: 确定关系的属性集和依赖集根据上面的语义信息及其它的一些基本常识,可以得到如下的函数依赖:TnoCno,(Sno,Cno)Tno,因此关系模式可以写成:R(Sno, Cno, Tno, TnoCno,(Sno,Cno)Tno ) 找出候选码L 属性集:SnoR 属性集:LR 属性集:Cno,TnoNLR 属性集:(Sno)+= ,则左属性集不能决定所有其它属性,则需要与 LR 属性集中的属性联合起来确定候选码。(Sno,Cno)+=Tno(Sno,Tno)+=Cno所以该关系具有两个候选码,这里我们选(Sno,Cno)作为主码。 检验是否达到 2NFA. 检验 R 是否满足 2NF:R 中非主属性 Tno 完全函数依赖主码,满足2NF。 检验是否达到 3NFA. 检验 R 是否满足 3NF:R 中没有传递函数依赖,满足 3NF。 检验是否达到 BCNFA. 检验 R 是否达到 BCNF:R 中的非主属性 Tno 有起决定因素的函数依赖 TnoCno,故不满足 BCNF。B. 分解为 BCNF:将 R 中非主属性 Tno 有起决定因素的函数依赖TnoCno 的相关属性组成一个关系 R1,其它相关属性组成另一个关系 R2,如下:R1(Tno,Cno , TnoCno )R2(Sno, Tno , SnoTno)C. 检验分解后的关系是否满足 BCNF:R1 和 R2 中均不存在非主属性起第 4 章 关系模型的基本理论 7决定因素的函数依赖,故为 BCNF。思考:如果取 Sno,Tno 作为候选码呢?4.3.5 范式间的关系规范化的目的:解决插入、删除、修改异常以及数据冗余高的问题。规范化的方法:从模式中各属性间的函数依赖入手,尽量做到每个模式表示客观世界中的一个“事件”。规范化的实现手段:用模式分解的方法。实际上,从 1NF 到 BCNF 的过程,就一个不断消除函数依赖关系中弊病的过程 。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号