资源描述
第三章 关系规范化理论
关系得规范就是关系数据模型设计中得一个非常重要得问题,它可以指导我们设计出好得关系.设计与构造合理得关系,使之能准确地反映现实世界并有利于应用与具体操作,就是关系得规范与探讨得问题。所以有人把关系得规范化理论称为设计数据库得理论.
第一节 关系中得键
一、候选键(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(零件号,零件名,设计人,设计人等级)
因为零件号→零件名 零件号→设计人 设计人→设计人等级
故 零件号→设计人等级
第三节 规范化与范式
一、规范化问题得提出
关系模型得特点就是使用二维表来表示现实世界得实体集合与属性关系,这样容易历届与被用户所接受,然而并不就是所有二维表都能构成关系模型,见表
农产品统计表
省市
总产值
产量
亩产
小麦
稻谷
小麦
稻谷
北京
河北
职工情况登记表
职工号
姓名
级别
工资
学历
毕业时间
001
张
技10
83
中专
大学
研究生
1957
1968
1981
002
李
技12
62
以上两张二维表就不能构成关系,因为出现了子项,那么具备那些条件得二维表才能称为关系呢?在关系模式中,要求二维表具有以下性质:
(1) 二维表中得每一列都就是不能分割得基本数据项,且无重复组。
(2) 同一关系中,没有相同得列出现。
描述一个实体,不需要重复出现相同得属性名
(3) 同一关系中,各行得内容不能完全相同
完全相同得行,实无意义
满足上述条件得关系,称为规范化得关系,否则叫非规范化形式,这种“形式"即不能被定义成关系模型,又不能被关系型得DBMS所接受,因此要对非规范化得表格(关系)进行规范化处理。
所谓规范化处理,就就是逐步用更单纯、更规则得关系来取代原有关系得过程.
二、规范化得意义
规范化处理得目得不仅将关系得“概念”单一化,使每一个数据项使一个简单得基本项,又无重复组。还有以下意义:
(1)解决冗余度问题
所谓“冗余"问题就是指表格中得数据重复.]
例:船与船员之间得1:N联系见表
船与船员
SHIP
S#
SNAME
NSP
S#
SNAME
NO
NAME
AGE
S1
DQ
S1
DQ
1001
S2
XH
S1
DQ
1004
S1
DQ
1020
SC
S#
NO
NAME
S2
XH
1025
S1
1001
…
S1
1004
…
S1
1020
这样重复太多,一条船有多个船员,船号与船名就要重复存储多次,如果将船得有关数据分开存储,分为SHIP与SC两个表,在SC中存放船号与船名数据,则重复得仅仅就是船号,其余得重复都消除了。
为了减少甚至消除重复,将关系进行分离,正就是逐步规范化得重要一步.
(2)消除多义性问题
多义性就是指关系中某些属性含义不清或有多种可能得含义。
例:船部件这个关系 SP(S#,P#,QTY)
其中数量QTY到底就是说明S与P之间得联系,即某船需要某个部件多少个,还就是仅仅说明P为仓库中现存某个部件多少个呢?在这个关系中就是确定不了得,如果QTY仅仅表示部件得库存量,则将关系SP分离,使用关系PQ(P#,QTY)来描述就不再含糊不清了。
(3)解决操作可行性及提高操作方便性
指对数据得插入、删除与修改就是否可行,就是否方便
例:职工编号,姓名,工资等级,工资
假如要插入新得工资等级与工资额,例如9—110元,由于没有对应得职工编号、姓名,无法插入。假如要删除E1这一行,则10级100元也丢失。修改也随之都修改.
NO
NAME
STATUS
SAL
E1
陈
10
100
E2
李
8
120
E3
严
12
80
…
…
…
…
E9
王
8
120
引起上述问题得原因,就是非主属性之间得依赖关系所致.
这个关系中各个属性之间得对应关系可用下图表示,NO为关键字,即主属性,其余属性为非主属性。
EMP(NO,NAME,STATUS,SAL)
箭头表示属性间得对应关系,即任意一个职工号,仅能在表中找到一个姓名NAME与之对应,任何一个非主属性SAL函数依赖于非主属性STATUS。
如果要从这个关系中消除非主属性之间得依赖关系,可将表改为两个关系
EMP(NO,NAME,STATUS) SS(STATUS,SAL)
这样插入数据9级、110元就可在SS中进行.
由上例可见,通过适当“分离”可以消除非主属性之间得依赖性,如何进行分离或合并,使得新得一组关系模式既能反映现实世界,又能排除多义性,控制冗余度,并方便实现数据操作,正就是我们研究规范化问题得目得所在。
三、 系规范化得表述
所谓关系得规范化,就是指满足某些条件后得关系,通常按属性间依赖情况来区分关系规范化得程度,并义范式来表述(NORMAL FORMS)
范式又分为n级,有1NF,2NF,3NF等等,为了判断一个关系属于哪一级范式,引入函数依赖这一概念.
所有规范化得关系起码就是第一范式,在第一范式中进一步满足一些要求得关系为第二范式,依次类推。
各种形式得范式在关系数据哭系统中都允许存在,但为了更方便于数据处理,通常要把低级范式分解为若干个3NF或BCNF,下面给出各范式得概念。
1) 第一范式(1NF) 关系R中,每个分量都就是不可分割得。
2) 第二范式(2NF) 若关系R满足1NF,且每个非主属性完全函数依赖于关键字。
3) 第三范式(3NF) 若关系R满足2NF,且每个非主属性非传递依赖于关键字。
4) 加强第三范式(BCNF) 若关系R满足3NF,且所有主属性与非主属性既非部分依赖关键字,也非传递依赖于关键字。
下面举例说明逐步规范化得方法与过程.
例:已知一张购物登记表,要求规范到BCNF范式得程度,以便被关系型DBMS所接受。
购物登记
顾客姓名
商品名称
数量
单价
付款
工作单位
顾客地址电话
A
彩电
1
1400元
1400元
××厂
L市 38540
B
手电筒
钢笔
1
20
35元
2、2元
47、50元
××学校
P市 28266
C
电冰箱
手电筒
钢笔
1
1
2
1530元
3、5元
2、2元
1537、9元
××机关
L市53834
(1) 分析已知表,来决定就是否需要进行规范化处理
通过观察可知,表不能直接被关系型DBMS所接受,因为它存在许多问题.
1) 在关系模型中对关系得最起码要求,应该满足第一范式,表显然不满足这个条件。
2) 在数据操作上将会出现下列问题:
① 删除异常
假如顾客A不购买彩电,那么表中得记录A删除时就会将商品名称、单价等同时删除,此时彩电价格也无从查找。
② 插入异常
如顾客A想要购买洗衣机,不但要填上洗衣机得名称与价格,还要填上有关顾客A得信息(工作单位、地址、电话)显然就是重复得。
③ 数据得冗余量大
在有多个顾客购买同一商品得情况下,就使这一商品得名称与单价多次重复出现在数据库中,造成数据得大量冗余.
3) 非独立数据存在
付款项目就是由数量*单价得来得,在此可以去掉,基于上述情况,必须对表进行规范化处理。
(2)利用规范化工具逐步解决表中得数据结构所存在得问题
首先,去掉表中得非独立项,变成满足第一范式得要求得关系命名为R
R 购物登记表
顾客姓名
商品名称
数量
单价
工作单位
顾客地址
电话
A
彩电
1
1400元
××厂
L市
38540
B
手电筒
1
35元
××学校
P市
28266
B
钢笔
20
2、2元
××学校
P市
28266
C
电冰箱
1
1530元
××机关
L市
53834
C
手电筒
1
3、5元
××机关
L市
53834
C
钢笔
2
2、2元
××机关
L市
53834
显然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,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得函数依赖图
E
C
A
F
G
D
B
从图中瞧出,非主属性与关键字得关系,哪些就是完全函数依赖,哪些就是部分函数依赖,根据范式得定义,下面可以逐步再进行规范化。
E
第四步 去掉非主属性对关键字得部分依赖关系,得到一组新得关系函数依赖图。
D
B
A
C
A
F
G
B
于就是R得到一组新得关系R1R2R3得集合
三个关系表
R1顾客关系
顾客姓名
工作单位
顾客地址
电话
A
××厂
L市
38540
B
××学校
P市
28266
C
××机关
L市
53834
R2商品关系
商品名称
单价
彩电
1400元
手电筒
35元
钢笔
2、2元
电冰箱
1530元
R3购物关系
顾客姓名
商品名称
数量
A
彩电
1
B
手电筒
1
B
钢笔
20
C
电冰箱
1
C
手电筒
1
C
钢笔
2
R1得关键字为顾客姓名
R2得关键字为商品姓名
R3得关键字为顾客姓名 商品姓名得组合
关系R1 R2与R3均属于BCNF,这就是因为所有主属性与非主属性既非部分依赖关键字,也非传递依赖关键字。
至此,规范化处理完毕
上述得规范化处理结果,事实上已消除了前面提到得删除异常、插入异常与数据冗余得问题。
、假如顾客不购买彩电,只就是合理地删除R3中一个记录,不会影响R1中得顾客信息,也不会影响R2中得商品信息。
、假如顾客A购买洗衣机时,在R3中填写数量,而价格在R2中填写,与顾客信息无关。
、在多个顾客购买同一种商品得情况下,因商品名称与价格R2在中,不会重复出现多次,消除了冗余
第四节 关系模式得分解
分解就是提高关系范式等级得重要方法,以下通过一个事例说明模式分解得一般方法与对分解得要求。
例:已知关系
S(学号,班级,班主任)∈2NF
下图显示了它包含得内容与属性间得依赖关系,试将S分解为3NF得新关系
学号
班级
班级
班主任
5
10
15
20
25
30
35
财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号各属于哪一个班。
学号
班主任
班级
班主任
5
10
15
20
25
30
35
李力
李力
李力
李力
丁一
丁一
丁一
财9241
管9235
电9241
李力
李力
丁一
2. 分解后得新关系应相互独立,对一个关系得更改,不会影响另一关系
试比较一上得①、②两种方案,设15好同学从管9235转入财9241,按第①翻案,仅修改关系S-C就可以了;而按第②方案,要同时修改关系S-C与关系S=M,显然就是不好得。
插入得时候,①、②两种方案得情况也不相同。假定增加一个新班,则必须等这个班有了学生才能将班级与班主任得信息分别插入关系S-C与S-M中去。
产生一上这些差别得原因可以结合上图来说明,在图中得三个属性之间学号→班级,班级→班主任,都就是完全函数依赖,而学号→班主任,则为传递函数依赖。方案①建立得两个新关系分别使用了两个原有得完全依赖关系,方案②与③都只有一个新关系使用完全以来,另一个新关系使用传递以来,这就就是方案①优于其她方案得原因。可见借助于图得属性依赖图解,可以选择正确得分解方案.
展开阅读全文