关系规范化样例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章关系规范化理论
关系的规范是关系数据模型设计中的一个非常重要的问题,它可以指导我们设计出好的关系。设计和构造合理的关系,使之能准确地反映现实世界并有利于应用和具体操作,是关系的规范和探讨的问题。所以有人把关系的规范化理论称为设计数据库的理论。
第一节关系中的键
一、候选键(candidate key)
凡在一个关系中具有主键特性的属性或属性组,均称为候选键。因为它们都具有被选为主键的条件,所以一个关系可能有多个候选键,但只能选其中的一个为主键。
候选键中包含的属性,期于的属性称为非主属性。
例:在职工关系ZG (姓名,性别,年龄)中,增加一个属性:职工号,即得到一个新关系:ZG (职工号,姓名,性别,年龄)
又假定职工号与职工姓名是一一对应的,即没有两个职工的姓名相同,则“职工号”和“姓名”两个都是候选键。
二、替代键(alternate key)
对于某一指定的关系可能存在多个候选键,但只能选其中的一个为主键。在确定主键后,其余的候选键都是替代键,替代键在需要时可代替主键。
二、外来键(foreign key)
但关系中的某些属性系由另一个关系的主键构成时,则该属性(或属性组)称为外来键。
第二节函数依赖
一、函数依赖
定义1:设R是一个关系,X和Y是R中的两个属性。若R中X的任何一个值,仅有一个Y的值与之对应,则称为R的属性Y函数依赖(FD)于属性X,记作X Y。
例如:在描述船员的关系
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#,才能说明某部件在某船上的用量,缺一不可,因此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(零件号,零件名,设计人,设计人等级)
因为零件号→零件名零件号→设计人设计人→设计人等级
故零件号→设计人等级
第三节规范化和范式
一、规范化问题的提出
关系模型的特点是使用二维表来表示现实世界的实体集合和属性关系,这样容易历届和被用户所接受,然而并不是所有二维表都能构成关系模型,见表
以上两张二维表就不能构成关系,因为出现了子项,那么具备那些条件的二维表才能称为关系呢?在关系模式中,要求二维表具有以下性质:
(1)二维表中的每一列都是不能分割的基本数据项,且无重复组。 (2)同一关系中,没有相同的列出现。 描述一个实体,不需要重复出现相同的属性名
(3)同一关系中,各行的内容不能完全相同 完全相同的行,实无意义
满足上述条件的关系,称为规范化的关系,否则叫非规范化形式,这种“形式”即不能被定义成关系模型,又不能被关系型的DBMS 所接受,因此要对非规范化的表格(关系)进行规范化处理。
所谓规范化处理,就是逐步用更单纯、更规则的关系来取代原有关系的过程。 二、规范化的意义
规范化处理的目的不仅将关系的“概念”单一化,使每一个数据项使一个简单的基本项,又无重复组。还有以下意义:
(1)解决冗余度问题
所谓“冗余”问题是指表格中的数据重复。] 例:船与船员之间的1:N 联系见表
SHIP NSP SC
这样重复太多,一条船有多个船员,船号与船名就要重复存储多次,如果将船的有关数据分开存储,分为SHIP 和SC 两个表,在SC 中存放船号与船名数据,则重复的仅仅是船号,其余的重复都消除了。
为了减少甚至消除重复,将关系进行分离,正是逐步规范化的重要一步。
(2)消除多义性问题
多义性是指关系中某些属性含义不清或有多种可能的含义。
例:船部件这个关系 SP(S#,P#,QTY)
其中数量QTY到底是说明S与P之间的联系,即某船需要某个部件多少个,还是仅仅说明P 为仓库中现存某个部件多少个呢?在这个关系中是确定不了的,如果QTY仅仅表示部件的库存量,则将关系SP分离,使用关系PQ(P#,QTY)来描述就不再含糊不清了。
(3)解决操作可行性及提高操作方便性
指对数据的插入、删除与修改是否可行,是否方便
例:职工编号,姓名,工资等级,工资
假如要插入新的工资等级和工资额,例如9-110元,由于没有对应的职工编号、姓名,无法插入。
引起上述问题的原因,是非主属性之间的依赖关系所致。
这个关系中各个属性之间的对应关系可用下图表示,NO为关键字,即主属性,其余属性为非主属性。
EMP(NO,NAME,)
箭头表示属性间的对应关系,即任意一个职工号,仅能在表中找到一个姓名NAME与之对应,任何一个非主属性SAL函数依赖于非主属性STATUS。
如果要从这个关系中消除非主属性之间的依赖关系,可将表改为两个关系
EMP() SS()
这样插入数据9级、110元就可在SS中进行。