配色: 字号:
第06章 关系数据及其规范化理论
2022-12-24 | 阅:  转:  |  分享 
  
第6章 关系数据及其规范化理论数据库设计任务针对给定的应用环境和用户需求,建立一个合理的数据库模式,使数据库系统能够高效地存储和管理数据。
指导工具规范化理论它主要研究的是关系模式中各属性之间的依赖关系及其对关系模式的影响,探讨良好的关系模式应具备的特性,以及使关系模
式达到良好的方法。6.1 问题的提出6.1.1 关系模式中可能存在的问题 【例6.1】 设有一个订购关系模式R(订单编
号orderID,订单日期orderDate,客户编号custID,送货地址orderAddress,客户名称custName,商
品编号pdID,商品名称pdName,订购数量quantity)。R中存在的问题数据冗余是指相同数据在数据库中多次重复存储 导致的
问题:不仅会浪费存储空间,而且可能造成数据的不一致性。 R中存在的问题(续)更新异常插入异常:希望保存的数据无法存入数据库修改异
常:潜在的数据的不一致性删除异常:不想删除的数据删除了结论订购关系模式R不是一个好的模式。“好”的模式:不会发生插入异常、删除异常
、更新异常,数据冗余应尽可能少。原因由存在于模式中的某些数据依赖引起的6.1.2 解决的方法 解决方法:通过分解关系模式来消除其
中不合适的数据依赖,减少数据冗余。将例6.1中订购关系模式R分解为四个关系模式:商品信息Product(pdID, pdName)
客户信息Customer(custID, custName)订单信息Order(orderID, orderDate, custI
D, orderAddress)订单细节OrderDetail(orderID, pdID, quantity) 6.2 函数依
赖 数据依赖同一关系中属性值之间存在相互依赖与相互制约的关系函数依赖数据依赖中最重要的一种它反映了同一关系中属性间一一对应的约束6
.2.1 函数依赖的基本概念 1.函数依赖定义6.1 设有关系模式R(U),U是R的属性集合,X和Y是U的子集。对于R(U)的
任意一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同,而在Y上的属性值不同,则称“X函数决定Y”或“Y函数依赖于X
”,记做X→Y。函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。函数依赖是语
义范畴的概念。只能根据数据的语义来确定函数依赖。数据库设计者可以对现实世界作强制的规定。【例6.2】 在订购关系模式R中,如下函数
依赖成立:orderID→(orderDate,orderAdress)custID→custName(orderID, pdID
) → quantity 但是pdID→quantity若规定custName不重,则custName→custID1.函数依赖(
续)当X→Y成立时,则称X为决定因素(Determinant),称Y为依赖因素(Dependent)。当Y不函数依赖于X时,记为X
→Y。如果X→Y,且Y→X,则记其为X←→Y。 2.平凡函数依赖与非平凡函数依赖 定义6.2 在关系模式R(U)中,对于U的子集
X和Y,如果X→Y,但Y ? X,则称X→Y是非平凡的函数依赖若X→Y,但Y ? X, 则称X→Y是平凡的函数依赖【例6.3】
在订购关系模式R中:orderID→orderID(custID, custName)→custName 对于任一关系模式,平凡
函数依赖都是必然成立的,它不反映新的语义,因此若不特别声明, 我们总是讨论非平凡函数依赖。3.完全函数依赖与部分函数依赖 定义6.
3 在关系模式R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’ Y, 则称Y完全函数依赖于X,记作
X F Y。 若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X P Y。【例6.4】 在订购关系模
式R中:(orderID, pdID) P (orderDate,orderAdress) (orderID, pdID)
F quantity 6.传递函数依赖 定义6.4 在关系模式R(U)中,如果X→Y,Y→Z,且Y ?X,Y→X,则
称Z传递函数依赖于X,记作X T Z。 如果Y→X, 即X←→Y,则Z直接依赖于X。【例6.5】 在订购关系模式R中:
orderID → custID,custID → orderID ,custID → custName,orderID T
custName 弱数据依赖是产生数据冗余的原因之一6.2.2 函数依赖的推理规则 逻辑蕴含定义6.5 设有关系模式R(U,
F),X和Y是属性集合U的两个子集,如果对于R中每个满足F的关系r也满足X→Y,则称F逻辑蕴含X→Y。【例6.6】 在订购关系模
式R中:orderID→(orderDate,orderAdress)蕴含下面两个函数依赖:orderID → orderDate
, orderID → orderAdress 6.2.2 函数依赖的推理规则(续) 函数依赖集的闭包定义6.6 设F是函数依
赖集合,被F逻辑蕴含的函数依赖的全体构成的集合,称为函数依赖集F的闭包,记为F+。Armstrong公理系统1974年,W.W.A
rmstrong提出的一套推理规则用于推导函数依赖的逻辑蕴涵关系已证明其有效性和完备性1.Armstrong公理系统 3条基本公理
自反律:如果Y?X?U,则X→Y在R上成立。 增广律:如果X→Y在R上成立,且Z?U,则XZ→YZ。 传递律:如果X→Y和Y→Z
在R上成立,则X→Z在R上也成立。 2.几条有用的推理规则 合并性规则:若X→Y,X→Z,则X→YZ。分解性规则:若X→Y,Z ?
Y ,则X→Z。伪传递性规则:若X→Y,WY→Z,则WX→Z复合性规则:若X→Y,W→Z,则WX→YZ通用一致性规则:若X→Y,W
→Z,则X(W-Y)→YZ 【例6.7】 给定关系模式R(U, F),X、Y为U的子集,F = {X→Y},则F + = {X→?
,X→X,X→Y,X→XY,Y→?,Y→Y,XY→?,XY→X,XY→Y,XY→XY} 基数=10【例6.8】 给定关系模式R(U
, F),X、Y、Z为U的子集,F = {X→Y, Y→Z},则依据上述关于函数依赖集闭包计算公式,可以得到F+由43个函数依赖组
成。 属性集的闭包定义6.7 设F为属性集U上的一组函数依赖,X ?U, XF+ ={ A|X→A能由F 根据Armstrong
公理导出},XF+称为属性集X关于函数依赖集F 的闭包,可简记为X+。关于闭包的引理引理6.1 设F为属性集U上的一组函数依赖,
X,Y ? U,X→Y能由F 根据Armstrong公理推导出,即X→Y ∈F +的充分必要条件是Y ?X+。用途 将判定X→Y是
否能由F根据Armstrong公理导出的问题,转化为求出X+ 、判定Y是否为X+的子集的问题。算法6.1 算法6.1 求属性集
X关于函数依赖F的属性闭包X +。输入:关系模式R的全部属性集U,U的子集X,U上的函数依赖集F。 输出:X关于F的属性闭包X +
。步骤:设i = 0,1,2,…。 (1) 初始化:i = 0,X(i) = X(0) = X。(2) 求属性集A。A是这样的属性
:在F中寻找尚未用过的左边是X(i)子集的函数依赖Y(i)?X(i),并且在F中有Y(i)→Z(i),则A = Z(1)∪Z(2)
∪…∪Z(i)。(3) X(i+1) = X(i)∪A。(4) 判断以下条件之一是否成立,若有条件成立,则转向(5); 否则,i=
i+1,转向(2)。① X(i+1) = X(i); ② X(i)中已包含了R的全部属性; ③ 在F中的每个函数依赖的右边属性中已
没有X(i)中未出现过的属性; ④ 在F中未用过的函数依赖的左边属性已没有X(i)的子集。 (5) 输出X(i+1),即为X +。
【例6.9】 设有关系模式R(U, F),其中U = ABCDE,F ={AB→C,B→D,C→E,E→C,A→C},计算(BC
)+。计算过程:(1) 设X(0)=BC。(2) 在F中找出尚未用过的左边是BC子集的函数依赖:B→D,C→E。(3) X(1)=
X(0)∪D∪E=BCDE。(4) 很明显,X(1)≠X(0)。(5) 在F中找出尚未用过的左边是BCDE子集的函数依赖E→C。
(6) X(2) = X(1)∪C = BCDE。(7) X(2) = X(1),算法结束。(8) (BC)+ = BCDE。 【
例6.10】 设有关系模式R(U, F),其中U = ABCDEI,F = {A→D,AB→C,BI→C,DE→I,C→E},求(
AC) +。计算过程:(1) 令X ={AC},则X(0)= AC。(2) 在F中找出未用过的左边是AC子集的函数依赖A→D,C→
E。(3) X(1)= X(0)∪D∪E = ACDE。(4) 很明显,X(1)≠X(0)。(5) 在F中找未用过的左边是ACDE
子集的函数依赖DE→I。(6) X(2)= X(1)∪I =ACDEI。(7) 虽然X(2)≠X(1),但是F中未用过的函数依赖的
左边属性已没有X(2)的子集,算法结束。(8) (AC) + = X(2)= ACDEI。6.2.3 码的函数依赖表示 超码定义
6.8 设K为关系模式R(U, F)中的属性或属性集合。若K→U,则K称为R的一个超码。 侯选码定义6.9 设K为关系模式R(
U, F)中的属性或属性集合。 若K F U,则K称为R的一个侯选码。主码若关系模式R有多个候选码,则选定其中的一个做为主码。
码的函数依赖表示(续) 主属性和非主属性组成候选码的属性称为主属性,不参加任何候选码的属性称为非主属性。 单码和全码单个属性是码,
称为单码;整个属性组都是码,称为全码。 外码定义6.10 关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X
是R的外码,也称外部码。 6.2.4 最小函数依赖集 1.函数依赖集的覆盖与等价 定义6.11 设F和G是关系模式R上的两个函
数依赖集,如果所有为F所蕴含的函数依赖都为G所蕴含,即F +是G +的子集:F +?G +,则称G是F的覆盖。定义6.12 如果
G是F的函数覆盖,同时F又是G的函数覆盖,即F + = G+,则称F和G是相互等价的函数依赖集。引理6.2 F+ = G+的充分
必要条件是, F ?G +且G ?F +。 2.最小函数依赖集 定义6.13 对于一个函数依赖集F,称函数依赖集Fmin为F的最
小函数依赖集,当且仅当Fmin满足下述条件:Fmin与F等价, = F +。Fmin中每个函数依赖X→Y的依赖因素Y只含有一
个属性。Fmin中每个函数依赖X→Y的决定因素X没有冗余,即只要删除X中任何一个属性就会改变Fmin的闭包 。这样的函
数依赖称为是左边不可约的函数依赖。Fmin中每个函数依赖都不是冗余的,即删除Fmin中任何一个函数依赖,Fmin就将变为另一个不等
价于Fmin的集合。可以证明,对任何一个函数依赖集都存在一个与其等价的最小依赖集。3.求最小函数依赖集的算法 算法6.2 计算F
的最小函数依赖集Fmin。输入:一个函数依赖集F。输出:F的一个等价的最小函数依赖集Fmin。步骤:(1) 函数依赖的右部单属性化
。利用分解性规则,使F中的任何一个函数依赖的右部仅含有一个属性。(2) 去掉多余的函数依赖。逐一地检查F中的每一个函数依赖X→A,
令G=F-{X→A},求X关于函数依赖集G的闭包X +,若A ?X +,则从F中去掉X→A,即F=F-{X→A}。(3) 去掉各函
数依赖左部多余的属性。逐一地检查左部非单个属性的函数依赖XY→A,求X关于函数依赖集F的闭包X +,若A?X +,则以X→A代替F
中的XY→A,即F = F-{XY→A }∪{X→A}。(4) 最终得到的函数依赖集F即为最小函数依赖集Fmin。 【例6.11】
设有关系模式R(U, F),其中U = ABC,F = {A→BC, B→C, AB→C},求F的最小函数依赖集Fmin。 求解
过程:(1) 函数依赖的右部单属性化。F = {A→B, A→C, B→C, AB→C} 【例6.11】 (续)求解过程:(2)
去掉多余的函数依赖。检查A→B:令G ={A→C, B→C, AB→C},A关于函数依赖集G的闭包A+ = AC,B?A +,A→
B不是冗余的。检查A→C:令G ={A→B, B→C, AB→C},A关于函数依赖集G的闭包A+ = ABC,C?A+,A→C是冗
余的,从F中去掉,则F={A→B, B→C, AB→C}。检查B→C:令G = {A→B, AB→C},B关于函数依赖集G的闭包B
+ = B,C?B+,B→C不是冗余的。检查AB→C:令G ={A→B, B→C},AB关于函数依赖集G的闭包(AB)+ = AB
C,C?(AB)+,AB→C是冗余的,从F中去掉,则F ={A→B, B→C}。【例6.11】 (续)求解过程:(3) 去掉各函数
依赖左部多余的属性。F中的函数依赖左部均为单属性,不存在冗余的属性。 因此F的最小函数依赖集Fmin = {A→B,
B→C}。 【例6.12】 设有关系模式R(U, F),其中U = ABC,F = {AB→C, A→B, B→A},求F的最小函
数依赖集Fmin。求解过程:(1) F中所有函数依赖右部已经是单属性。(2) F中没有冗余的函数依赖,判断过程略。(3) 去掉各函
数依赖左部多余的属性。考察AB→C,对于AB的真子集A: A→C成立吗?A关于F的闭包A+ = ABC,C?A+
,则说明A→C成立,B是多余的,F = {A→C, A→B, B→A}即为Fmin = {A→C, A→B, B→A}。 【例6.
12】(续) 如果改变考察顺序,先来判定B→C ?。B关于F的闭包B+ = ABC,C?B+,则说明B→C成立,A是多余的,F={
B→C, A→B, B→A},由此得到另一个最小函数依赖集Fmin = {B→C, A→B, B→A}。最小函数依赖集不是唯一的。
不同的处理顺序,可能会得到不同的最小函数依赖集。练习已知关系模式R(U,F), U = {A,B,C,D,E,G}
F = {A→BE, CB→D,E→CG} 求关系R的候选码?请验证,关系R是否满足函数依赖C→DH? 为什么? C
D H S C1 D1 H1 S1 C1 D
1 H2 S1 C1 D1 H1 S2 C2 D2 H2 S
3关系模式R(A,B,C,D,E), F={A→BC,CD→E,B→D,E→A},确定侯选码求Fmin6.3 规范化 规范化的关
系其分量都是不可分的数据项最基本的条件规范化程度可以有6个不同的级别6种范式:第一范式、第二范式、第三范式、BC范式、第四范式和第
五范式。各种范式之间存在联系:1NF?2NF?3NF?BCNF?4NF?5NF通常把某一关系模式R为第n范式简记为R?nNF。规范
化的概念一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化6.3.1
范式 1.第一范式(1NF)定义6.14 如果关系模式R中每个属性值都是一个不可分解的数据项,则称该关系模式满足第一范式,简称1
NF,记为R?1NF。第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。 例:非规范化关系0NF-
>1NF的方法: 纵横延伸【例6.1】 订购关系模式RR的码(orderID,pdID),R?1NFR存在数据冗余、更新异常
(插入异常、删除异常、修改异常)的问题R不是一个好的关系模式。 2.第二范式(2NF)定义6.15 如果一个关系模式R?1NF,
且它的所有非主属性都完全函数依赖于R的码,则R?2NF。 分析:订购关系模式RR的函数依赖图R?2NF R存在问题的原因:存在or
derDate、orderAddress、pdName等属性对码的部分函数依赖分析(续)解决方法:投影分解product(pdID
, pdName) order_cust(orderID, orderDate, custID, custName,ord
erAddress) orderDetail(orderID,pdID,quantity) 分析(续)Product的函数
依赖图 ?2NForder_cust的函数依赖图 ?2NForderDetail的函数依赖图 ?2NF分析(续)orde
r_cust存在的问题:数据冗余更新异常(插入异常、删除异常、修改异常)属于2NF的关系模式并不一定是一个好的关系模式。 3.第三
范式(3NF) 定义6.16 如果一个关系模式R∈2NF,且所有非主属性都不传递函数依赖于码,则R∈3NF。 分析:order_
custorder_cust ?2NF ?3NForder_cust 存在问题的原因custName传递函数依赖于orderID
。 分析:order_cust(续)解决方法:投影分解Customer(custID,custName) Orders(ord
erID,orderDate,custID,orderAddress) 分析:order_cust(续)Customer的函数
依赖图 ?3NF Orders的函数依赖图 ?3NF 分析关系模式STC?3NF的关系模式就一定是好的关系模式?关
系模式STC(学生学号Sno, 教师编号Tno, 课程课号Cno, 成绩Grade) 每个教师只教一门课,但一门课可由几个教师讲授
。 存在如下函数依赖:(Sno,Cno)→Tno(Sno,Cno)→Grade(Sno,Tno)→Cno(Sno,Tno)→Gra
deTno → Cno STC的候选码:(SNO,CNO)和(SNO,TNO)分析关系模式STC(续)关系模式STC(学生学号Sn
o, 教师编号Tno, 课程课号Cno, 成绩Grade) STC?3NFSTC存在的问题:数据冗余更新异常(插入异常、删除异常、
修改异常)属于3NF的关系模式并不一定是一个好的关系模式。 6.BCNF范式(BCNF) 定义6.17 关系模式R?1NF,对任
何非平凡的函数依赖X→Y,X均包含码,则R?BCNF。若R∈BCNF 所有非主属性都完全函数依赖于每个候选码。所有主属性都完全函数
依赖于每个不包含它的候选码。没有任何属性完全函数依赖于非码的任何一组属性。 若R∈BCNF ,则 R∈3NF;反之不成立。 分析
关系模式STCSTC?3NFSTC?BCNFF={(Sno,Cno)→Tno,(Sno,Cno)→Grade,(Sno,Tno)→
Cno,(Sno,Tno)→Grade,Tno→ Cno} STC存在问题的原因:主属性CNO对不包含它的码(Sno,Tno)间存
在不良函数依赖分析关系模式STC(续)解决方法:投影分解方法1:SC(Sno, Cno, Grade) TC(Tno, Cno
) 方法2:ST(Sno, Tno, Grade) TC(Tno, Cno) 3NF与BCNF的关系与区别如果关系模式R∈BCN
F,必定有R∈3NF如果R∈3NF,且R只有一个候选码,则R必属于BCNF。3NF和BCNF是在函数依赖的条件下对模式分解所能达到
的分离程度的测度。一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内,它已实现了彻底的分离,已消除了插入和删除的异常。3
NF的“不彻底”性表现在可能存在主属性对码的部分依赖和传递依赖。练习题指明下列关系模式最高属于第几范式.R(X,Y,Z) F
={XY→Z}R(X,Y,Z) F={Y→Z,XZ→Y}R(X,Y,Z) F={Y→Z,Y→X,X→YZ}R(X,Y,
Z) F={X→Y,X→Z}R(W,X,Y,Z) F={X→Z,WX→Y}6.3.2 模式分解 把低一级的关系模式分解为
若干个高一级的关系模式的方法不是唯一的只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义模式分解的定义定义6.18
设有关系模式R(U),取定U的一个子集的集合{U1,U2, …,Uk},使得U = U1∪U2 ∪…∪Uk,如果用一个关系模式的集
合ρ={ R1(U1),R2(U2),…,Rn(Uk)}代替R(U),就称ρ是关系模式R(U)的一个分解。 关系模式分解时一般
应遵循的原则 关系模式进行无损连接分解。 保持原来模型的函数依赖关系。 【例6.13】 给定关系R(部门名称,主任姓名,主任电话)
,R上成立的函数依赖集F={部门名称→主任姓名,主任姓名→主任电话}。【例6.13】 分解方法一R1(部门名称)R2(主任姓名)R
3(主任电话) 这种方法既不符合无损连接,也没有保持函数依赖。 【例6.13】 分解方法二R1(部门名称,主任姓名) R2(主任
姓名,主任电话) 这种方法既既符合无损连接,也保持了函数依赖。 【例6.13】 分解方法三R1(部门名称,主任姓名) R2(部
门名称,主任电话) 这种方法虽然符合无损连接,但没有保持函数依赖 【例6.13】 分解方法四R1(部门名称,主任电话) R2(主
任姓名,主任电话) 这种方法虽然符合无损连接,但没有保持函数依赖 【例6.13】 综上所述第一种分解方法是错误的分解方法第二种分解
方法是最好的分解方法第三种和第四种分解方法都不是好的分解方法。 1.无损分解 定义6.19 设R是一个关系模式,F是R上的一个依
赖集,R分解为关系模式的集合?={R1(U1), R2(U2), … , Rk(Uk)}。如果对于R中满足F的每一个关系r,都有
则称分解?是满足函数依赖集F的无损连接分解或无损分解。 算法6.3 算法6.3 判别一个分解的无损连接性输入:(1)
关系模式R(U),其中U = {A1, A2, … , An}。(2) R(U)上成立的函数依赖集F。(3) R(U)的一个分解?
= {R1(U1), R2(U2), … , Rk(Uk)},而U = U1∪U2∪…∪Uk。输出:?相对于F是否无损分解。 算法
6.3(续)计算步骤:(1) 构造一个k行n列的表格,每列对应一个属性Aj( j = 1, 2, …, n),每行对应一个模式Ri
(Ui)(i = 1, 2, … , k )的属性集合。如果Aj在Ui中,那么在表格的第i行第j列处添上记号aj,否则添上记号bi
j。(2) 重复检查F的每一个函数依赖,并且修改表格中的元素,直到表格出现全a行或者表格不再发生变化为止。
取F中函数依赖X→Y,如果表格总有两行在X上分量相等,在Y分量上不相等,则修改Y分量的值,使这两行在Y分量上相等,实际修改分为两种
情况:① 如果Y分量中有一个是aj,另一个也修改成aj。② 如果Y分量中没有aj,就用标号较小的那个bij替换另一个符号。(3)
修改结束后的表格中有一行全是a,即a1, a2, … , an,则相对于F是无损分解,否则不是无损分解。【例6.14】 设有关系模
式R(U, F),其中U={A, B, C, D, E},F={A→C, B→C, C→D, DE→C, CE→A}。R(U, F
)的一个模式分解={R1(A, D), R2(A, B), R3(B, E), R4(C, D, E), R5(A, E)}。试判
断是否为无损分解。 求解过程: F={A→C, B→C, C→D, DE→C, CE→A}由于表格中出现了全a行,因此关系模式R(
U)的分解?是无损分解。b13b13b13a4a4a4a3a3a1a1定理6.1 定理6.1 关系模式R(U, F)分解为关系
模式R1(U1, F1), R2(U2, F2)是具有无损连接性的分解的充分必要条件是(U1∩U2→U1-U2)F+,或者(U2∩
U1→U2-U1) ?F+。 【例6.15】 设有关系模式R(U, F),U = ABCD,F = {A→B,B→C,D→B},若
将R分解成{ACD,BD},试判断该分解是否是无损分解。求解过程:U1=ACD,U2=BD,U2∩U1=D,U2-U1=B,显然D
→B成立,因此该分解是无损分解。 2.保持函数依赖 设有关系模式R(U, F),F是属性集U上的函数依赖集,Z是U的一个子集,F在
Z上的一个投影用 ?Z(F)表示,定义为 ?Z(F) = {X→Y|(X→Y)?F +,XY?Z,且Y?X
}。定义6.20 设有关系模式R(U)的一个分解?= {R1(U1), R2(U2), … , Rn(Uk)},F是R(U)上的
函数依赖集,如果F + = ,则称分解?保持函数依赖集F,简称保持函数依赖。 【例6.16】 设有
关系模式R(U, F),其中U =ABCD,F ={A→B,B→C,C→D,D→A}。R(U)的一个模式分解?={R1(U1),
R2(U2), R3(U3)},其中U1=AB,U2=BC,U3=CD。试判定?是否具有保持函数依赖性。求解过程如下。(1) 由题
意可知: ={A→B, B→A}, = {B→C, C→B}, ={C→
D, D→C}令G= ={ A→B, B→A, B→C, C
→B, C→D, D→C} 求解过程(续)(2) 逐一检查F中的每个函数依赖X→Y,X→Y?G+是否成立: A→B?G,
B→C?G,C→D?G因此 A→B?G+,B→C?G+,C→D?G+D关于函数依赖集G的闭包D+ = ABCD,A?D+,因此D
→A?G+,因此, 成立。求解过程(续)(3) 逐一检查G中的每个函数依赖X→Y,X→是否成立: A→B
?F,B→C?F,C→D?F,因此 A→B?F+,B→C?F+,C→D?F+。B、C、D关于函数依赖集G的闭包
B+=C+= D+=ABCD,A?B+,B?C+,C?D+,因此B→A?G+,C→B?G+,D→C?G+,因此,G?F+成立。综上
可知,分解具有保持函数依赖性。 算法6.4 判别一个分解的保持函数依赖性。输入:(1) 关系模式R(U),其中U = {A1,
A2, … , An}。(2) R(U)上成立的函数依赖集F。(3) R(U)的一个分解?= {R1(U1), R2(U2),
… , Rk(Uk)},而U = U1∪U2∪…∪Uk。输出:是否保持函数依赖。 算法6.4(续) 计算步骤:(1) 令G=
,F=F-G, Result=Ture。(2) 对于F中的第一个函数依赖X→Y,计算 ,并令F
= F - {X→Y}。(3) 若Y? ,则令Result=False,转向(4);否则,若F≠?,转向(2),否则转
向(4)。(4) 若Result = Ture,则保持函数依赖,否则不保持函数依赖。 示例【例6.17】 用算法6.4来实现例6.
16。求解过程:(1) G ={A→B, B→A, B→C, C→B, C→D, D→C},F = F - G = {D→A},R
esult = Ture。(2) 对于函数依赖D→A, = ABCD, F = F - {D→A }=?。(3) A
? ,且F =?,转向(4)。(4) 由于Result=Ture,所以模式分解保持函数依赖。 常用的分解前后等价的标准?分
解要具有“无损连接性”。?分解要“保持函数依赖性”。分解既要“保持函数依赖性”,又要具有“无损连接性”。 可以证明若要求分解具有无
损连接性,那么模式分解一定能够达到4NF。若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。若要求
分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。 6.3.3 关系模式规范化步骤
规范化程度过低的关系不一定能够很好地描述现实世界,可能会存在插入异常、删除异常、修改复杂、数据冗余等问题。规范化的基本思想 消除不
合适的数据依赖,使各关系模式达到某种程度的“分离”采用“一事一地”的模式设计原则让一个关系描述一个概念、一个实体或者实体间的一种联系。若多于一个概念就把它“分离”出去。所谓规范化实质上是概念的单一化。关系模式规范化的基本步骤 1NF ↓ 消除非主属性对码的部分函数依赖消除决定属性 2NF集非码的非平 ↓ 消除非主属性对码的传递函数依赖凡函数依赖 3NF ↓ 消除主属性对码的部分和传递函数依赖 BCNF 规范化小结(续)不能说规范化程度越高的关系模式就越好必须结合应用环境和现实世界的具体情况合理地选择数据库模式“基于3NF的系统设计”方法3NF是无条件可以达到的,并且基本解决了“异常”问题。6.4 小结 关系模式设计不好,可能会存在数据冗余和更新异常问题 规范化理论为数据库设计提供了理论指南和工具函数依赖的相关概念范式是衡量模式优劣的标准各级范式的定义关系模式的规范化过程就是模式分解过程保持函数依赖和无损连接的定义和判断方法 练习1.设有一教学管理数据库,其属性为:学号(S#),课程号(C#),成绩(G),任课教师(TN),教师所在的系(D)。这些数据有下列语义:学号和课程号分别与其代表的学生和课程一一对应;一个学生所修的每门课程至多只能修一次,且都有一个成绩;每门课程只有一位任课教师,但每位教师可以有多门课程;教师中没有重名,每个教师只属于一个系。(1)试根据上述语义确定函数依赖集,并画出函数依赖图。(2)用所有属性组成一个关系模式,那么该关系模式为何模式?(3)如果该关系模式不属于3NF,则将其分解为3NF。 练习(续)2.下图给出的关系R为第几范式?是否存在操作异常?若存在,则将其分解为高一级范式。分解完成的高级范式中是否可以避免分解前关系中存在的操作异常?
献花(0)
+1
(本文系籽油荃面原创)