欢迎来到天天文库
浏览记录
ID:25543297
大小:79.50 KB
页数:7页
时间:2018-11-20
《关系模型的基本理论》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第4章关系模型的基本理论·7·第4章关系模型的基本理论4.3关系数据库的规范化方法4.3.3函数依赖与范式一、1NF(第一范式)定义:若关系模式R的每一个分量是不可再分的数据项,则R1NF。理解:关系R消除了行合并和列合并的情况后,则成为1NF。举例:学生综合信息表毛病:①数据冗余大:每当有学生选一门课程时,表中重复出现该学生全部信息和所在学院信息,实际上有些信息只需存储一次就够了。②修改麻烦:数据冗余大必然造成修改麻烦,例如学一改换了学院,从计算机学院调到经管学院,则需从整个关系中逐一找到其对应的元组进行修改,若漏改一处则造成数据矛盾。③插入异常:本表的关键字是由学号和
2、课程名组合而成的,两者取值都不允许是空值。这样,若有一新学生来报道。会由于他没有选修任何一门课程而无法将其信息插入表中,这样就形成了插入异常。第4章关系模型的基本理论·7·④删除异常:插入异常的反面就是删除异常。在表中,若删除学三,则整个元组不复存在,连同经管学院的院长是李四这一信息也会一并删掉,这样会引起信息丢失。原因:表不够规范,即限制太少,造成表中存放的信息太杂,其依赖关系为:完全函数依赖:(学号,课程名)→成绩。部分函数依赖:学号→姓名,学院传递函数依赖:学号→学院→院长非关键字为决定因素:任课教师→课程名改进:消除同时存在于一个关系中属性间不同的依赖情况,也就是
3、使一个关系表示的信息单纯一些。二、2NF(第二范式)定义:若R1NF,且每一个非主属性完全函数依赖于码,则R2NF。理解:当1NF消除了非主属性对码的部分函数依赖,则成为2NF。分解:将部分函数依赖单独提取出来,把一个1NF表无损分解为2个2NF表。注:所谓无损是无损连接和保持依赖。下例将学生综合信息表分解为学生学院信息表和学生成绩任课教师表。学生学院信息表学生成绩任课教师表毛病:①数据冗余大:计算机学院及张三重复了二次。②修改麻烦:若计算机学院院长更换了,刚必须重复修改每个计算机学院学生的信息,若漏改一处则造成数据矛盾。③插入异常:如果新开设一个学院,会因为没有招生而不
4、能插入相应的信息。④删除异常:若删除学三,则整个元组不复存在,连同经管学院方面的信息一并删掉,这样会引起信息丢失。原因:学生信息表中存在传递函数依赖。第4章关系模型的基本理论·7·三、3NF(第三范式)定义:若R2NF,且每一个非主属性都不传递依赖于码,则R3NF。理解:当2NF消除了非主属性对码的传递函数依赖,则成为3NF。分解:将传递函数依赖单独提取出来,把一个2NF表无损分解为2个3NF表。下例将学生学院信息表分解为学生信息表和学院信息表。学生信息表学院信息表毛病:①数据冗余大:张华任英语老师这一信息重复了二次。②修改麻烦:若张华所带的英语课程更换老师,刚必须重复修
5、改其所班级每个学生对应的任课教师的名字,若漏改一处则造成数据矛盾。③插入异常:。如果新来了一个英语老师,会因为没有学生选课而不能插入相应的信息。④删除异常:若删除02号的高等数学成绩,则整个元组不复存在,连同马军是高等数学的任课教师的信息一并删掉,这样会引起信息丢失。原因:学生成绩表中存在作为非主码的“任课教师”是决定因素。四、BCNF定义:若R3NF,且关系中每个决定因素都是码,则RBCNF。理解:当3NF消除了非主属性作为决定因素的函数依赖,则成为BCNF,或者说删除了非主属性之间的函数依赖,则成为BCNF。分解:将非主属性间的函数依赖单独提取出来,把一个3NF表无损
6、分解为2个BCNF表。下列将学生成绩任课教师表分解为学生成绩表和任课教师表学生成绩表任课教师表第4章关系模型的基本理论·7·4.3.4模式分解一、模式分解的原则所谓模式分解就是将一个关系模式分解成若干个模式,分解后的模式具有下面三个特征:①分解后的模式均为高一级的模式。②分解后关系中的数据不会丢失,即分解后的关系再经连接后能恢复到原来的关系,这叫无损连接。③分解后关系中的函数依赖不会丢失,这叫依赖保持。二、模式分解的步骤①确定关系的属性集和依赖集。②找出候选码。A.找出所有的左属性集(只出现在依赖左边的属性),所有的右属性集(只出现在依赖右边的属性),所有的左右属性集(既
7、出现在左边也出现在右边的属性),所有非左非右属性集(既不出现在左边也不出现在右边的属性)。B.找出候选码:看左属性是否可以做为唯一个候选码(检验左属性是否可以决定所有其它属性),如果不行,再与左右属性集中的每一个属性联合起来,看是否可以做为候选码(如果左右属性集中的属性不只一个,就可能有多个候选码),如果有非左非右属性,在候选码中要加这些属性。③多步分解,达到BCNF。A.首先非主属性是否有部分函数依赖,若有表示不符合2NF,分解成2NF。B.再检查非主属性是否有传递函数依赖,若有表示不符合3NF,分解成3NF。C.再检查非主
此文档下载收益归作者所有