关系规范化样例_第1页
关系规范化样例_第2页
关系规范化样例_第3页
关系规范化样例_第4页
关系规范化样例_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 关系规范化理论关系的规范是关系数据模型设计中的一个非常重要的问题,它可以指导我们设计出好的关系。设计和构造合理的关系,使之能准确地反映现实世界并有利于应用和具体操作,是关系的规范和探讨的问题。所以有人把关系的规范化理论称为设计数据库的理论。第一节 关系中的键一、候选键(candidate key)凡在一个关系中具有主键特性的属性或属性组,均称为候选键。因为它们都具有被选为主键的条件,所以一个关系可能有多个候选键,但只能选其中的一个为主键。候选键中包含的属性,期于的属性称为非主属性。例:在职工关系ZG(姓名,性别,年龄)中,增加一个属性:职工号,即得到一个新关系:ZG(职工号,姓名,性别

2、,年龄)又假定职工号与职工姓名是一一对应的,即没有两个职工的姓名相同,则“职工号”和“姓名”两个都是候选键。 二、替代键(alternate key)对于某一指定的关系可能存在多个候选键,但只能选其中的一个为主键。在确定主键后,其余的候选键都是替代键,替代键在需要时可代替主键。二、 外来键(foreign key)但关系中的某些属性系由另一个关系的主键构成时,则该属性(或属性组)称为外来键。第二节 函数依赖一、函数依赖定义1:设R是一个关系,X和Y是R中的两个属性。若R中X的任何一个值,仅有一个Y的值与之对应,则称为R的属性Y函数依赖(FD)于属性X,记作XàY。例如:在描述船员的关

3、系CREW(NO,NAME,AGE,JOB,PAY)它表示由任一船员号NO,仅能找到一个姓名、一个年龄、一个。定义中的属性X可以是复合属性,例如SP(S#,P#,QTY-USED)中的(S#,P#)二、完全函数依赖和部分函数依赖定义2:如果属性Y函数依赖于复合属性X,而且不与X的任一子集X函数依赖(XàY ),则称属性Y完全函数依赖(FFD)于复合函数X,记作XàY。若XàY但不是完全函数依赖,则称Y部分函数依赖于X。例:在关系SP(S#,P#,QTY-USED)中QTY-USED表示部件P#在S#船上使用的数量,只有同时指定S#和P#,才能说明某部件在某船上的用

4、量,缺一不可,因此QTY-USED完全函数依赖于(S#,P#)。三、传递函数依赖定义3:如果X,Y,Z是R中的三个属性(或属性复合)若XàY, YàX, YàZ,则称Z对X传递函数依赖。例如:S(S#,SNAME,CITY,POSTCODE)中S#àCITY,CITYà S#,若CITYà POSTCODE,则称POSTCODE传递依赖于S#。例:设有下列关系GPD(零件号,零件名,设计人,设计人等级)因为零件号零件名 零件号设计人 设计人设计人等级 故 零件号设计人等级第三节 规范化和范式 一、规范化问题的提出关系模型的特点是使用二

5、维表来表示现实世界的实体集合和属性关系,这样容易历届和被用户所接受,然而并不是所有二维表都能构成关系模型,见表农产品统计表省市总产值产量亩产小麦稻谷小麦稻谷北京河北职工情况登记表职工号姓名级别工资学历毕业时间001张技1083中专大学研究生195719681981002李技1262以上两张二维表就不能构成关系,因为出现了子项,那么具备那些条件的二维表才能称为关系呢?在关系模式中,要求二维表具有以下性质:(1) 二维表中的每一列都是不能分割的基本数据项,且无重复组。(2) 同一关系中,没有相同的列出现。 描述一个实体,不需要重复出现相同的属性名(3) 同一关系中,各行的内容不能完全相同完全相同的

6、行,实无意义满足上述条件的关系,称为规范化的关系,否则叫非规范化形式,这种“形式”即不能被定义成关系模型,又不能被关系型的DBMS所接受,因此要对非规范化的表格(关系)进行规范化处理。所谓规范化处理,就是逐步用更单纯、更规则的关系来取代原有关系的过程。 二、规范化的意义规范化处理的目的不仅将关系的“概念”单一化,使每一个数据项使一个简单的基本项,又无重复组。还有以下意义:(1)解决冗余度问题所谓“冗余”问题是指表格中的数据重复。例:船与船员之间的1:N联系见表船与船员SHIPS#SNAMENSPS#SNAMENONAMEAGES1DQS1DQ1001S2XHS1DQ1004S1DQ1020SC

7、S#NONAMES2XH1025S11001S11004S11020这样重复太多,一条船有多个船员,船号与船名就要重复存储多次,如果将船的有关数据分开存储,分为SHIP和SC两个表,在SC中存放船号与船名数据,则重复的仅仅是船号,其余的重复都消除了。为了减少甚至消除重复,将关系进行分离,正是逐步规范化的重要一步。(2)消除多义性问题多义性是指关系中某些属性含义不清或有多种可能的含义。例:船部件这个关系 SP(S#,P#,QTY) 其中数量QTY到底是说明S与P之间的联系,即某船需要某个部件多少个,还是仅仅说明P为仓库中现存某个部件多少个呢?在这个关系中是确定不了的,如果QTY仅仅表示部件的库存

8、量,则将关系SP分离,使用关系PQ(P#,QTY)来描述就不再含糊不清了。(3)解决操作可行性及提高操作方便性指对数据的插入、删除与修改是否可行,是否方便例:职工编号,姓名,工资等级,工资假如要插入新的工资等级和工资额,例如9-110元,由于没有对应的职工编号、姓名,无法插入。假如要删除E1这一行,则10级100元也丢失。修改也随之都修改。NONAMESTATUSSALE1陈10100E2李8120E3严1280E9王8120 引起上述问题的原因,是非主属性之间的依赖关系所致。 这个关系中各个属性之间的对应关系可用下图表示,NO为关键字,即主属性,其余属性为非主属性。 EMP(NO,NAME,

9、STATUS,SAL)箭头表示属性间的对应关系,即任意一个职工号,仅能在表中找到一个姓名NAME与之对应,任何一个非主属性SAL函数依赖于非主属性STATUS。如果要从这个关系中消除非主属性之间的依赖关系,可将表改为两个关系 EMP(NO,NAME,STATUS) SS(STATUS,SAL)这样插入数据9级、110元就可在SS中进行。由上例可见,通过适当“分离”可以消除非主属性之间的依赖性,如何进行分离或合并,使得新的一组关系模式既能反映现实世界,又能排除多义性,控制冗余度,并方便实现数据操作,正是我们研究规范化问题的目的所在。三、 系规范化的表述所谓关系的规范化,是指满足某些条件后的关系,

10、通常按属性间依赖情况来区分关系规范化的程度,并义范式来表述(NORMAL FORMS)范式又分为n级,有1NF,2NF,3NF等等,为了判断一个关系属于哪一级范式,引入函数依赖这一概念。所有规范化的关系起码是第一范式,在第一范式中进一步满足一些要求的关系为第二范式,依次类推。各种形式的范式在关系数据哭系统中都允许存在,但为了更方便于数据处理,通常要把低级范式分解为若干个3NF或BCNF,下面给出各范式的概念。1) 第一范式(1NF) 关系R中,每个分量都是不可分割的。2) 第二范式(2NF) 若关系R满足1NF,且每个非主属性完全函数依赖于关键字。3) 第三范式(3NF) 若关系R满足2NF,

11、且每个非主属性非传递依赖于关键字。4) 加强第三范式(BCNF) 若关系R满足3NF,且所有主属性和非主属性既非部分依赖关键字,也非传递依赖于关键字。下面举例说明逐步规范化的方法与过程。例:已知一张购物登记表,要求规范到BCNF范式的程度,以便被关系型DBMS所接受。购物登记顾客姓名商品名称数量单价付款工作单位顾客地址电话A彩电11400元1400元××厂L市 38540B手电筒钢笔12035元2.2元47.50元××学校P市 28266C电冰箱手电筒钢笔1121530元3.5元2.2元1537.9元××机关L市53834(1) 分析

12、已知表,来决定是否需要进行规范化处理通过观察可知,表不能直接被关系型DBMS所接受,因为它存在许多问题。1) 在关系模型中对关系的最起码要求,应该满足第一范式,表显然不满足这个条件。2) 在数据操作上将会出现下列问题: 删除异常假如顾客A不购买彩电,那么表中的记录A删除时就会将商品名称、单价等同时删除,此时彩电价格也无从查找。 插入异常如顾客A想要购买洗衣机,不但要填上洗衣机的名称与价格,还要填上有关顾客A的信息(工作单位、地址、电话)显然是重复的。 数据的冗余量大在有多个顾客购买同一商品的情况下,就使这一商品的名称和单价多次重复出现在数据库中,造成数据的大量冗余。3) 非独立数据存在付款项目

13、是由数量*单价得来的,在此可以去掉,基于上述情况,必须对表进行规范化处理。 (2)利用规范化工具逐步解决表中的数据结构所存在的问题首先,去掉表中的非独立项,变成满足第一范式的要求的关系命名为RR 购物登记表顾客姓名商品名称数量单价工作单位顾客地址电话A彩电11400元××厂L市38540B手电筒135元××学校P市28266B钢笔202.2元××学校P市28266C电冰箱11530元××机关L市53834C手电筒13.5元××机关L市53834C钢笔22.2元××机关L市53

14、834显然R是1NF,从而解决了第1)个问题进一步规范化过程如下步骤进行:第一步 语义分析 每一名顾客有一个工作单位、住址、电话; 每种商品有一种价格 每个顾客所购物品有一定数量; 付款=单价*数量(非独立项可去掉)为了讨论方便,将表种属性用字母简记顾客姓名 A 单价 D商品名称 B 顾客工作单位 E数量 C 顾客地址 F 顾客电话 G第二步 找出函数依赖集 FD有语义分析,根据函数依赖的含义,可以的出下面一组函数依赖关系。 AàE ,AàF,AàG BàD ABàC故FD=AàE,AàF,AàG,BàD

15、,ABàC 第三步 画出函数依赖图 首先从函数依赖集中,选出一组属性作为关键字,这里选关键字AB,分析非主属性对关键字依赖的情况。 (A,B)-f->C 表明属性C对关键字(A,B)为函数依赖 (A,B)-P->E 表明属性E对关键字(A,B)为部分函数依赖 (A,B)-P->F (A,B)-P->G(A,B)-P->D (理由同上)画出关系R的函数依赖图ECAFGDB从图中看出,非主属性与关键字的关系,哪些是完全函数依赖,哪些是部分函数依赖,根据范式的定义,下面可以逐步再进行规范化。E第四步 去掉非主属性对关键字的部分依赖关系,得到一组新的关系函数依赖

16、图。DBACAFGB 于是R得到一组新的关系R1R2R3的集合三个关系表R1顾客关系顾客姓名工作单位顾客地址电话A××厂L市38540B××学校P市28266C××机关L市53834R2商品关系商品名称单价彩电1400元手电筒35元钢笔2.2元电冰箱1530元R3购物关系顾客姓名商品名称数量A彩电1B手电筒1B钢笔20C电冰箱1C手电筒1C钢笔2R1的关键字为顾客姓名R2的关键字为商品姓名R3的关键字为顾客姓名 商品姓名的组合 关系R1 R2和R3均属于BCNF,这是因为所有主属性和非主属性既非部分依赖关键字,也非传递依赖关键字。至此

17、,规范化处理完毕上述的规范化处理结果,事实上已消除了前面提到的删除异常、插入异常和数据冗余的问题。.假如顾客不购买彩电,只是合理地删除R3中一个记录,不会影响R1中的顾客信息,也不会影响R2中的商品信息。.假如顾客A购买洗衣机时,在R3中填写数量,而价格在R2中填写,与顾客信息无关。.在多个顾客购买同一种商品的情况下,因商品名称与价格R2在中,不会重复出现多次,消除了冗余第四节 关系模式的分解 分解是提高关系范式等级的重要方法,以下通过一个事例说明模式分解的一般方法和对分解的要求。例:已知关系S(学号,班级,班主任)2NF下图显示了它包含的内容和属性间的依赖关系,试将S分解为3NF的新关系学号

18、班级班级班主任5101520253035财9241财9241管9235管9235电9241电9241电9241李力李力学号李力李力班主任丁一丁一丁一这里有三种不同的分解法,即 S S-C(学号,班级)C-M(班级,班主任) S S-C(学号,班级)S-M(学号,班主任) S S-M(学号,班主任)C-M(班级,班主任) 三种方案得出的新关系全是3NF。但分解的质量却大有差异。以下结合对分解质量的要求,对这三种方案作一比较。1.分解必须是无损的,即不应在分解丢失信息在上例中,第种方案就不能保证无损分解,下图显示了这一方案得出的两个关系。由于财9241班和管9335班的班主任是同一个人,分解后将无法分辨5,10,15,20号各属于哪一个班。学号班主任班级班主任5101520253035李力李力李力李力丁一丁一丁一财9241管9235电9241李力李力丁一2. 分解后的新关系应相互独立,对一个关系的更改,不会影响另一关系试比较一上的、两种方案,设15好同学从管9235

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论