赞
踩
关系数据库逻辑设计
关系模式由五部分组成,即它是一个五元组:
R(U, D, DOM, F)
R: 关系名
U: 组成该关系的属性名集合
D: 属性组U中属性所来自的域
DOM: 属性向域的映象集合
F: 属性间数据的依赖关系集合
限定属性取值范围:例如学生成绩必须在0-100之间
定义属性值间的相互关连(主要体现于值的相等与否),这就是数据依赖,它是数据库模式设计的关键
关系模式R(U, D, DOM, F)
简化为一个三元组:R(U, F)
当且仅当U上的一个关系r满足F时,r称为关系模式 R(U, F)的一个关系
建立一个描述学校教务的数据库:
学生的学号(Sno)、所在系(Sdept)
系主任姓名(Mname)、课程名(Cname)
成绩(Grade)
单一的关系模式 : Student <U、F>
U ={ Sno, Sdept, Mname, Cname, Grade }
属性组U上的一组函数依赖F:
F ={ Sno → Sdept, Sdept → Mname, (Sno, Cname) → Grade }
结论:Student关系模式不是一个好的模式。
“好”的模式:不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少
原因:由存在于模式中的某些数据依赖引起的
解决方法:通过分解关系模式来消除其中不合适的数据依赖
把这个单一模式分成3个关系模式:
S(Sno,Sdept,Sno → Sdept);
SC(Sno,Cno,Grade,(Sno,Cno) → Grade);
DEPT(Sdept,Mname,Sdept→ Mname)
规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。
定义:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。
定义:在关系模式R(U)中,对于U的子集X和Y,
如果X→Y,但Y
若X→Y,但Y ⊆ X, 则称X→Y是平凡的函数依赖
例:在关系SC(Sno, Cno, Grade)中,
非平凡函数依赖: (Sno, Cno) → Grade
平凡函数依赖: (Sno, Cno) → Sno
(Sno, Cno) → Cno
定义:在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’ !
若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X
[例1] 中 (Sno,Cno)
(Sno,Cno)
因为Sno →Sdept成立,且Sno是(Sno,Cno)的真子集
定义:在R(U)中,如果X→Y,(Y
记为:X
注: 如果Y→X, 即X←→Y,则Z直接依赖于X。
例: 在关系Std(Sno, Sdept, Mname)中,有:
Sno → Sdept,Sdept → Mname
Mname传递函数依赖于Sno
定义:设K为R<U,F>中的属性或属性组合。若K
主属性与非主属性
全码
[例2]
关系模式S(Sno,Sdept,Sage),单个属性Sno是码,
SC(Sno,Cno,Grade)中,(Sno,Cno)是码
[例3]
关系模式R(P,W,A)
P:演奏者 W:作品 A:听众
一个演奏者可以演奏多个作品
某一作品可被多个演奏者演奏
听众可以欣赏不同演奏者的不同作品
码为(P,W,A),即All-Key
定义:关系模式 R 中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码
范式是符合某一种级别的关系模式的集合
关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式
范式的种类:
各种范式之间存在联系:
某一关系模式R为第n范式,可简记为R∈nNF。
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库但是满足第一范式的关系模式并不一定是一个好的关系模式
[例4] 关系模式 S-L-C(Sno, Sdept, Sloc, Cno, Grade)
Sloc为学生住处,假设每个系的学生住在同一个地方
函数依赖包括:
(Sno, Cno)
Sno → Sdept
(Sno, Cno)
Sno → Sloc
(Sno, Cno)
Sdept → Sloc
S-L-C不是一个好的关系模式
原因
Sdept、 Sloc部分函数依赖于码。
解决方法
S-L-C分解为两个关系模式,以消除这些部分函数依赖
SC(Sno, Cno, Grade)
S-L(Sno, Sdept, Sloc)
定义 :若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。
例:S-L-C(Sno, Sdept, Sloc, Cno, Grade) ∈1NF
S-L-C(Sno, Sdept, Sloc, Cno, Grade)
SC(Sno, Cno, Grade) ∈ 2NF
S-L(Sno, Sdept, Sloc) ∈ 2NF
采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。
定义:关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性Z(Z Y), 使得X→Y,Y→Z成立, Y !→ X,则称R<U,F> ∈ 3NF。
例:2NF关系模式S-L(Sno, Sdept, Sloc)中
函数依赖:
Sno→Sdept
Sdept → Sno
Sdept→Sloc
可得:
Sno→Sloc,即S-L中存在非主属性对码的传递函数依赖,S-L
解决方法
采用投影分解法,把S-L分解为两个关系模式,以消除传递函数依赖:
S-D(Sno, Sdept)
D-L(Sdept,Sloc)
S-D的码为Sno, D-L的码为Sdept。
分解后的关系模式S-D与D-L中不再存在传递依赖
采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。
定义:关系模式R<U,F>∈1NF,若X !→Y且Y
等价于:每一个决定属性因素都包含码
若R∈BCNF
[例8]在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。
函数依赖:
(S,J)→T,(S,T)→J,T→J
(S,J)和(S,T)都是候选码
STJ∈3NF
没有任何非主属性对码传递依赖或部分依赖
STJ
T是决定因素,T不包含码
解决方法
将STJ分解为二个关系模式:
ST(S,T) ∈ BCNF, TJ(T,J)∈ BCNF
没有任何属性对码的部分函数依赖和传递函数依赖
如果R∈3NF,且R只有一个候选码
关系数据库的规范化理论是数据库逻辑设计的工具
目的:尽量消除插入、删除异常,修改复杂,数据冗余
基本思想:逐步消除数据依赖中不合适的部分
实质:概念的单一化
关系模式规范化的基本步骤
定义:对于满足一组函数依赖 F 的关系模式R <U,F>,其任何一个关系r,若函数依赖X→Y都成立, (即r中任意两元组t,s,若t[X]=s[X],则t[Y]=s[Y]),则称F逻辑蕴含X →Y
关系模式R <U,F >来说有以下的推理规则:
自反律: 若Y
证: 设Y X U
对R <U,F> 的任一关系r中的任意两个元组t,s:
若t[X]=s[X],由于Y X,有t[y]=s[y],
所以X→Y成立,自反律得证
增广律: 若X→Y为F所蕴含,且Z
证:设X→Y为F所蕴含,且Z
设R<U,F> 的任一关系r中任意的两个元组t,s:
若t[XZ]=s[XZ],则有t[X]=s[X]和t[Z]=s[Z];
由X→Y,于是有t[Y]=s[Y],所以t[YZ]=s[YZ],
所以XZ→YZ为F所蕴含,增广律得证。
传递律:若X→Y及Y→Z为F所蕴含,则X→Z为 F所蕴含。
证:设X→Y及Y→Z为F所蕴含。
对R<U,F> 的任一关系 r中的任意两个元组 t,s:
若t[X]=s[X],由于X→Y,有 t[Y]=s[Y];
再由Y→Z,有t[Z]=s[Z],所以X→Z为F所蕴含,传递律得证。
根据A1,A2,A3这三条推理规则可以得到下面三条推理规则:
根据合并规则和分解规则,可得引理
引理: X→A1 A2…Ak成立的充分必要条件是X→Ai成立(i=l,2,…,k)
有效性:由F出发根据Armstrong公理推导出来的每一个函数依赖一定在F+中;
完备性:F+中的每一个函数依赖,必定可以由F出发根据Armstrong公理推导出来
定义: 在关系模式R<U,F>中为F所逻辑蕴含的函数依赖的全体叫作 F的闭包,记为F+。
定义:设F为属性集U上的一组函数依赖,X
F={X
引理:设F为属性集U上的一组函数依赖,X,Y
用途:将判定X→Y是否能由F根据Armstrong公理导出的问题,转化为求出XF+ 、判定Y是否为XF+的子集的问题
算法:求属性集X(X
输入:X,F
输出:XF+
步骤:
(1)令X(0)=X,i=0
(2)求B,这里B = { A |(
(3)X(i+1)=B∪X(i)
(4)判断X(i+1)= X (i)吗?
(5)若相等或X(i)=U , 则X(i)就是XF+ , 算法终止。
(6)若否,则 i=i+l,返回第(2)步。
[例1] 已知关系模式R<U,F>,其中
U={A,B,C,D,E};
F={AB→C,B→D,C→E,EC→B,AC→B}。
求(AB)F+ 。
解:设X(0)=AB;
(1) X(1)=AB∪CD=ABCD。
(2) X(0)≠ X(1)
X(2)=X(1)∪BE=ABCDE。
(3) X(2)=U,算法终止
(AB)F+ =ABCDE。
[例2] 设有关系模式R(A,B,C,D,E),其上的函数依赖集:F={A→BC,CD→E, B→D,E→A}
(1)计算B+;(2)求出R的所有候选关键字
解:
(1)X={B},X(0)={B}, X(1)={BD}, X(2)={BD},所以B+={BD}
(2)根据候选关键字定义,R的候选关键字只可能由F中各函数依赖的只出现在左边属性和未出现在函数依赖中的属性构成,但是除此以外,对于即出现在左边,又出现在右边的属性,也可能构成候选关键字。所以可进行组合分析得到A,BC,CD ,E也为候选关键字
综上,候选关键字为:A,BC,CD,E
定义:如果G+=F+,就说函数依赖集F覆盖G(F是G的覆盖,或G是F的覆盖),或F与G等价。
引理:F+ = G+ 的充分必要条件是F
定义:如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。亦称为最小依赖集或最小覆盖。
[例2] 关系模式S<U,F>,其中:
U={ Sno,Sdept,Mname,Cno,Grade },
F={ Sno→Sdept,Sdept→Mname,(Sno,Cno)→Grade }
设F’={Sno→Sdept,Sno→Mname,Sdept→Mname,(Sno,Cno)→Grade,(Sno,Sdept)→Sdept}
F是最小覆盖,而F’不是。
因为:F ’ - {Sno→Mname}与F ’等价
F ’ - {(Sno,Sdept)→Sdept}也与F ’等价
定理:每一个函数依赖集F均等价于一个极小函数依赖集Fm。此Fm称为F的最小依赖集。
证明: 构造性证明,找出F的一个最小依赖集。
(1)逐一检查F中各函数依赖FDi:X→Y,若Y=A1A2 …Ak,k > 2,
则用 { X→Aj |j=1,2,…, k} 来取代X→Y。
(2)逐一检查F中各函数依赖FDi:X→A,令G=F-{X→A},
若A
(3)逐一取出F中各函数依赖FDi:X→A,设X=B1B2…Bm,
逐一考查Bi (i=l,2,…,m),若A
则以X-Bi 取代X。
[例3] F = {A→B,B→A,B→C,A→C,C→A}
Fm1、Fm2都是F的最小依赖集:
Fm1= {A→B,B→C,C→A}
Fm2= {A→B,B→A,A→C,C→A}
[例4] 设关系模式R<A,B,C,D>,函数依赖集F={A→C,C→A, B→AC,D→AC,BD→A}
求出F的最小函数依赖集。
[例5] 设关系模式R<A,B,C,D,E,F>,函数依赖集F={AB→E,BC→D,BE→C,CD→B,CE→AF,CF→BD,C→A,D→EF},
求F的最小函数依赖集。
把低一级的关系模式分解为若干个高一级的关系模式的方法不是唯一的
只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义
三种模式分解等价的定义:
定义:关系模式R<U,F>的一个分解:ρ={ R1<U1,F1>,R2<U2,F2>,…,Rn<Un,Fn>} ,且不存在 Ui
定义:函数依赖集合{X→Y | X→Y
例1: 已知R<U,F>,U={A,B,C,D}, F={A->BD, D->C}, 如果将R分解为R1(U1, F1)和R2(U2, F2), 其中U1={A,B,D}, U2={A,C}, 则F1,F2分别是?
例:S-L(Sno, Sdept, Sloc)
F={ Sno→Sdept,Sdept→Sloc,Sno→Sloc}
S-L∈2NF
分解方法可以有多种:
1. S-L分解为三个关系模式:SN(Sno)
SD(Sdept)
SO(Sloc)
2. S-L分解为下面二个关系模式:NL(Sno, Sloc)
DL(Sdept, Sloc)
3. 将S-L分解为下面二个关系模式:ND(Sno, Sdept)
NL(Sno, Sloc)
S-L分解为三个关系模式:SN(Sno)
SD(Sdept)
SO(Sloc)
2. S-L分解为下面二个关系模式:NL(Sno, Sloc)
DL(Sdept, Sloc)
3. 将SL分解为下面二个关系模式:
ND(Sno, Sdept)
NL(Sno, Sloc)
分解后的关系为:
与SL关系一样,因此没有丢失信息。
第3种分解方法具有无损连接性
问题:这种分解方法没有保持原关系中的函数依赖
设关系模式R<U,F>被分解为若干个关系模式
R1<U1,F1>,R2<U2,F2>,…,Rn<Un,Fn>
(其中U=U1∪U2∪…∪Un,且不存在Ui
4.将SL分解为下面二个关系模式:
ND(Sno, Sdept)
DL(Sdept, Sloc)
这种分解方法就保持了函数依赖
第1种分解方法既不具有无损连接性,也未保持函数依赖,它不是原关系模式的一个等价分解
第2种分解方法保持了函数依赖,但不具有无损连接性
第3种分解方法具有无损连接性,但未持函数依赖
第4种分解方法既具有无损连接性,又保持了函数依赖
(1)构造初始表:构造一个k行n列的初始表,其中每列对应于R的一个属性,每行用于表示分解后的一个模式组成。如果属性Aj属于关系模式Ri, 则在表的第一i行第j列置符号aj,否则置符号bij 。
(2)根据F中的函数依赖修改表内容: 考察F中的每个函数依赖X→Y,在属性组X所在的那些列上寻找具有相同符号的行,如果找到这样的两行或更多的行, 则修改这些行,则使这些行上属性组Y所在的列上元素相同。
(3)判断分解是否为无损联接:如果通过修改,发现表中有一行变a1,a2,… an, 则分解是无损联接的,否则分解不具有无损联接性。
例1:
简易方法:只画关注数据
结果:具有无损连接性
例2:
设关系模式R(A,B,C,D,E,F),函数依赖集F={A→B,C→F,E→A,CE→A},将R分解为P={ABE,CDEF}。判断p是否是无损连接。
(1) {A→B,C→F,E→A,CE→A}
(2) {A→B,C→F,E→A,CE→A}
结果:不具有无损连接性
关系模式的规范化,其基本思想:
规范化理论为数据库设计提供了理论的指南和工具
也仅仅是指南和工具
并不是规范化程度越高,模式就越好
必须结合应用环境和现实世界的具体情况合理地选择数据库模式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。