数据库范式及关系模式示例.docx
- 文档编号:4421728
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:28
- 大小:75.90KB
数据库范式及关系模式示例.docx
《数据库范式及关系模式示例.docx》由会员分享,可在线阅读,更多相关《数据库范式及关系模式示例.docx(28页珍藏版)》请在冰豆网上搜索。
数据库范式及关系模式示例
第七章补充讲义
一、式举例
例1:
R,请问R为几式?
零件号
单价
P1
25
P2
8
P3
25
P4
9
BCNF。
〔25改成15还是BCNF.如:
课程号与学号〕
例2:
R,请问R为几式?
材料号
材料名
生产厂
M1
线材
M2
型材
M3
板材
M4
型材
2NF。
有局部依赖。
例3:
R,请问R为几式?
A
D
E
A1
D1
E2
A2
D6
E2
A3
D4
E3
A4
D4
E4
BCNF。
例4:
R(X,Y,Z),F={XY->Z},R为几式?
BCNF。
例5:
R(X,Y,Z),F={Y->Z,XZ->Y},R为几式?
3NF。
R的候选码为{XZ,XY},〔R中所有属性都是主属性,无传递依赖〕
二、求闭包
数据库设计人员在对实际应用问题调查中,得到的结论往往是零散的、不规的〔直观问题好办,复杂问题难办了〕,所以,这对分析数据模型,到达规化设计要求,还有差距,为此,从规数据依赖集合的角度入手,找到正确分析数据模型的方法,以确定关系模式的规化程度。
例1.关系模式R(U、F),其中,U={A,B,C,D,E};F={AB→C,B→D,EC→B,AC→B},求〔AB〕+F.
解:
设X(0)=AB
计算X
(1),在F中找出左边为AB子集的FD,其结果是:
AB→C,B→D
∴X
(1)=X(0)UB=ABUCD=ABCD显然,X
(1)≠X(0)
计算X
(2),在F中找出左边为ABCD子集的FD,其结果是:
C→E,AC→B
∴X
(2)=X
(1)UB=ABCDUBE=ABCDE显然,X
(2)=U
所以,〔AB〕+F=ABCDE.〔等于U,所以AB是唯一候选关键字〕
例2.设有关系模式R(U、F),其中U={A,B,C,D,E,I};F={A→D,AB→E,B→E,CD→I,E→C},计算〔AE〕+
解:
令X={AE},X(0)=AE
在F中找出左边是AE子集的FD,其结果是:
A→D,E→C
∴X
(1)=X(0)UB=X(0)UDC=ACDE显然,X
(1)≠X(0)
在F中找出左边是ACDE子集的FD,其结果是:
CD→I
∴X
(2)=X
(1)UI=ACDEI
显然,X
(2)≠X
(1),但F中未用过的函数依赖的左边属性已含有X
(2)的子集,所以不必再计算下去,即〔AE〕+=ACDEI.
因为,X〔3〕=X〔2〕,所以,算法完毕。
三、求最小依赖集
最小依赖集是对函数依赖集合进展规的结果,这样才能对一般关系模式进展准确分析。
例1.设函数依赖集F={AB→CE,A→C,GP→B,EP→A,CDE→P,HB→P,D→HG,ABC→PG},求与F等价的最小函数依赖集。
解:
将F中依赖右部属性单一化:
F1=ABCAB→E
HB→PA→C
D→HGP→B
D→GEP→A
ABC→PCDE→P
ABC→G
由于有A→C,所以AB→C为多余成份:
所以F2=AB→EHB→P
A→CD→H
GP→BD→G
EP→AABC→P
CDE→PABC→G
经过分析认为F2中无多余依赖,那么:
Fmin=F2为最小函数依赖集。
即Fmin={AB→E,HB→P,A→C,D→H,GP→B,D→G,EP→A,ABC→P,CDE→P,ABC→G}.
例2.F={A→B,B→A,B→C,A→C,C→A},求Fmin.
解:
F1=A→BA→C
BAB→C
CA
Fmin1=A→BA→C
B→AC→A
Fmin2=A→BC→A
B→C
例3.F={A→C,C→A,B→AC,D→AC},求Fmin。
解:
将F中依赖的右部属性单一化:
F1=A→CC→A
B→AB→C
D→AD→C
由于B→A,A→C,所以B→C是多余成份。
又由于D→A,A→C,所以D→C是多余成份。
所以F2=A→CC→A
B→AD→A
因为F2中所有依赖的左部都是单属性,所以不存在依赖左部的有多余属性。
所以Fmin=A→CC→A
B→AD→A
即Fmin={A→C,C→A,B→A,D→A}.
例4.设有关系模式R(U,F),其中:
U={E,F,G,H},F={E→G,G→E,F→EG,H→EG,FH→E},求F的最小依赖集。
解:
将F中依赖右部属性单一化:
F1=E→GH→E
G→EH→G
F→EFHE
F→G
由于有F→E,FH→E为多余成份:
〔不是因为有H→E,而是,F后面加一个H和不加一样〕
所以F2=E→GH→E
G→EH→G
F→EF→G
由于F2中,F→E和F→G以及H→E和H→G之一为多余,那么:
Fmin1={E→G,G→E,F→G,H→G}
Fmin2={E→G,G→E,F→E,H→E}Fmin3,Fmin4同理。
四、求候选码
1.候选关键字求解理论
对于给定的关系R〔A1,A2,…,An〕和函数依赖集F,可将其属性分为四类:
●L类:
仅出现在F的函数依赖左部的属性
●R类:
仅出现在F的函数依赖右部的属性
●N类:
在F的函数依赖左右两边均未出现的属性
●LR类:
在F的函数依赖左右两边均出现的属性
定理1:
对于给定的关系模式R及其函数依赖集F,假设X(X∈R)是L类属性,那么X必为R的任一候选关键字成员。
推论1:
对于给定的关系模式R及其函数依赖集F,假设X(X∈R)是L类属性,且X包含了R的全部属性,那么X必为R的唯一候选关键字。
定理2:
对于给定的关系模式R及其函数依赖集F,假设X(X∈R)是R类属性,那么X不在任何候选关键字中。
定理3:
设有关系模式R及其函数依赖集F,假设X是R的N类属性,那么X必包含在R的任一候选关键字中。
推论2:
对于给定的关系模式R及其函数依赖集F,假设X是R的N类和L类组成的属性集,且X+包含了R的全部属性,那么X必为R的唯一候选关键字。
2.单属性依赖集图论求解法〔多属性不行〕
I:
关系模式R,R的单属性函数依赖集F。
O:
R的所有候选关键字。
算法:
求F的最小依赖集Fmin。
构造FDG(函数依赖图)。
从图中找出关键属性集X〔X可为空〕。
查看G中有无独立回路,假设无那么输出X即为R的唯一候选关键字,转
,假设有,那么转
。
从各独立回路中各取一结点对应的属性与X组合成一候选关键字,并重复这一过程取尽所有可解的组合,即为R的全部候选关键字。
完毕。
3.多属性依赖集候选关键字求解法
I:
关系模式R及其函数依赖集F。
O:
R的所有候选关键字。
算法:
将R的所有属性分为L,R,N和LR四类,并令X代表L,N两类,Y代表LR类。
求X+,假设X包含了R的全部属性,那么X即为R的唯一候选关键字,转
,否那么,转
。
在Y中取一属性A,求(XA)+.假设它包含了R的全部属性,那么转
,否那么,调换一属性反复进展这一过程,直到试完所有Y中的属性。
假设已找出所有候选关键字,那么转
,否那么在Y中依次取2个,3个…,求它们的属性闭包,直到其闭包包含R的全部属性。
停顿,输出结果。
例1.设R=(O,B,I,S,Q,D),F={S→D,D→S,I→B,B→I,B→O,O→B},求R的所有候选关键字。
解:
Fmin={S→D,D→S,I→B,B→I,B→O,O→B}.
构造FDG.
关键属性集{Q}.〔原始点和孤立点统称关键点。
〕
有两个独立回路,SDS,IBOBI.
所以R的所有候选关键字为:
QSI,QSB,QSO,QDI,QDB,QDO.
例2.设R={X,Y,Z},F={X→Y,Y→X},求R的所有候选关键字。
解:
Fmin={X→Y,Y→X}。
构造FDG
关键属性{Z}.
有1个独立回路,
1〕.候选关键字个数=各独立回路中结点个数乘积=2〔1个回路,2个结点〕。
2〕.候选关键字所含属性个数=关键属性个数+独立回路个数=1+1=2。
所以R的所有候选关键字为:
ZX,ZY.
例3.设有关系模式R(A,B,C,D),其函数依赖集F={D→B,B→D,AD→B,AC→D},求R的所有候选关键字。
解:
经考虑F发现,A,C两属性是L类属性,由定理知,AC必是R的一候选关键字字成员。
又因〔AC〕+=ABCD,所以AC是R的唯一候选关键字。
例4.设有关系模式R(A,B,C,D,E,P),F={A→D,E→D,D→B,BC→D,DC→A},求R的所有候选关键字。
解:
经考察发现,C,E两属性是L类属性,故C,E必在R的任何候选关键字中,又P是N类属性,故P也必在R的任何候选关键字中。
又因〔CEP〕+=ABCDEP所以CEP是R的唯一候选关键字。
五、模式分解
对存在数据冗余、插入异常、删除异常问题的关系模式,应采取将一个关系模式分解为多个关系模式的方法进展处理。
在分解处理中会涉及一些新问题,为使分解后的模式保持原模式所满足的特性,要求分解处理具有无损联接性和保持函数依赖性。
即分解后的关系模式子集,应能通过自然连接运算恢复原状。
1、关系模式规化时一般应遵循以下原那么:
(1)关系模式进展无损连接分解。
关系模式分解过程中数据不能丧失或增加,必须把全局关系模式中的所有数据无损地分解到各个子关系模式中,以保证数据的完整性。
(2)保持原来模型的函数依赖关系。
因为这些函数依赖关系是数据模型反映的客观事物的固有属性,一般是不能舍弃的。
(3)合理选择规化程度。
考虑到存取效率,低级模式造成的冗余度很大,既浪费了存储空间,又影响了数据的一致性,因此希望一个子模式的属性越少越好,即取高级式;假设考虑到查询效率,低级式又比高级式好,此时连接运算的代价较小,这是一对矛盾,所以应根据情况,合理选择规化程度。
2、对模式分解的两个根本要求:
模式分解可以提高关系模式的规化程度,但是必须考虑如下问题:
防止信息丧失:
简单的说,就是模式R分解为R1,R2,…,Rn后,将R1,R2,…Rn自然连接还应该等于模式R。
这就是“无损失联接〞准那么。
防止数据关系丧失:
简单地说,就是模式R分解为R1,R2,…,Rn后,函数依赖集合F也被对应分解为F1,F2,…,Fn,应满足F与各Fi〔i=1,2,…n〕的并集等价,即满足F+=〔UFi〕+。
这就是“保持函数依赖〞准那么。
关系模式的规化过程是通过对关系模式的分解来实现的,但是把低一级的关系模式分解为假设干个高一级关系模式的方法并不是唯一的。
在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才有意义。
3、关系模式分解的三个定义:
(1)分解具有“无损联接性〞。
(2)分解要“保持函数依赖〞。
(3)分解既要“保持函数依赖性〞,又要具有“无损连接性〞。
规化理论提供了一套完整的模式分解算法,按照这套算法可以做到:
●假设要求分解具有无损联接性,那么模式分解一定能够到达4NF。
●假设要求分解保持函数依赖,那么模式分解一定能够到达3NF,但不一定能到达BCNF。
●假设要求分解具有无损联接性又保持函数依赖,那么模式分解一定能够到达3NF,但不一定能到达BCNF。
我们希望最好能够既要“保持函数依赖〞,又要具有“无损联接性〞,从上面结论可以看到只能到达3NF,至于能否到达BCNF或更高,要看具体情况。
这就是在数据库设计中一般采用“基于3NF的数据设计方法〞的根本原因。
4、模式设计方法的原那么:
关系模式R相对于函数依赖集F分解成ρ={R1,R2,…Rk},应具有以下特性:
(1)ρ中每个关系模式Ri上应有某种式性质〔3NF或BCNF〕
(2)无损联接
(3)保持函数依赖集
(4)最小性〔ρ中模式个数应最少和模式中属性总数应最少〕
一个好的设计方法应符合以下3个原那么:
表达性,别离性,最小冗余性。
5、模式分解的算法:
算法一:
把关系模式无损分解成BCNF
输入:
关系模式R和函数依赖集F
输出:
R的一个无损分解ρ={R1,R2,…,Rk}
方法:
设关系模式R〔U,F〕
〔1〕置初值:
ρ={R}。
〔2〕对于关系模式R的分解ρ〔初始时ρ={R}〕,如果ρ中有一个关系模式Ri相对于∏Ri〔F〕不是BCNF。
由定义可知,Ri中存在一个非平凡FDX→Y,有X不包含码。
此时把Ri分解成XY和Ri-Y两个模式。
重复上述过程,一直到ρ中每一个模式都是BCNF。
(3)算法完毕,ρ就是分解结果。
例1:
R〔U,F〕,U=ABCDEF={AB→C,B→D,D→E},码是AB。
分解过程如下:
〔1〕先分出DE,ρ={R1〔ABCD〕,R2〔DE〕}
〔2〕再从R1中分出BD,ρ={R1〔ABC〕,R2〔DE〕,R3〔BD〕}
〔3〕R1,R2,R3都属于BCNF,分解完成。
例2:
设有关系模式R〔U,F〕,其中:
U={C,T,H,R,S,G}F={CS→G,C→T,TH→R,HR→C,HS→R}
将其无损联接地分解为BCNF。
解:
R上只有一个侯选键HS。
〔1〕令ρ={CTHRSG}。
〔2〕ρ中的模式不是BCNF。
〔3〕考虑CS→G,这个函数依赖不满足BCNF条件〔CS不包含侯选键HS〕,将CTHRSG分解为CSG和CTHRS。
计算∏CSG〔F〕和∏CTHRS〔F〕,前者的最小覆盖是:
CS→G;后者的最小覆盖是:
C→T,HR→C,TH→R,HS→R。
模式CTHRS的侯选关键字是HS。
CSG已是BCNF,进一步分解CTHRS。
选择C→T,把CTHRS分解成CT和CHRS,计算∏CT〔F〕和∏CHRS〔F〕,前者的最小覆盖是:
C→T;后者的最小覆盖是:
HC→R,HS→R,HR→C。
模式CHRS的侯选关键字是HS。
CT已是BCNF,再分解CHRS。
选择HC→R,把CHRS分解成CHR和CHS,计算∏CHR〔F〕和∏CHS〔F〕,前者的最小覆盖是:
CH→R,HR→C;后者的最小覆盖是:
HS→C。
这时CHR和CHS均为BCNF。
〔4〕ρ={CSG,CT,CHR,CHS}。
(HS→R,HS→HRHR→C=>HS→C)
算法二:
把一个关系模式分解为3NF,使它具有依赖保持性。
输入:
关系模式R和R的最小依赖集Fmin。
输出:
R的一个分解ρ={R1,R2,…Rk},Ri为3NF〔i=1,…,k〕,ρ具有依赖保持性。
到达3NF保持函数依赖分解的方法:
设关系模式R〔U,F〕:
〔1〕将F化为最小函数依赖集,令F=Fmin。
〔2〕把在F中不出现的属性从U中去掉,属性集合仍然为U。
〔3〕对照F中的函数依赖集,将所有函数依赖左端一样的划为一组,相应的右端以及函数依赖均归入该组。
〔4〕这些分组就是分解后的模式组成。
〔5〕这种分解方法得到的就是到达3NF且保持函数依赖的分解。
例1:
F={B—>G,CE→B,C→A,CE→G,B→D,C→D},码是CE,分解成三个模式。
R1:
U1=BDG,F1={B→G,B→D}
R2:
U2=ACD,F2={C→A,C→D}
R3:
U3=BCEG,F3={CE→B,CE→G}
分解后,R1,R2,R3均到达3NF,且分解符合保持函数依赖的规那么。
例2:
设有关系模式R〔U,F〕,其中:
U={C,T,H,R,S,G}F={CS→G,C→T,TH→R,HR→C,HS→R},将其保持依赖性分解为3NF。
解:
〔1〕求出F的最小依赖集,Fmin={CS→G,C→T,TH→R,HR→C,HS→R}。
〔2〕无。
〔3〕R1:
U1=CSG,F1={CS→G}
U2=CT,F2={C→T}
U3=THR,F3={TH→R}
U4=HRC,F4={HR→C}
U5=HSR,F5={HS→R}
(4)ρ={CSG,CT,THR,HRC,HSR}
算法三:
把一个关系模式分解为3NF,使它既具有无损联接性又具有依赖保持性。
设关系模式R〔U,F〕:
①对于关系模式R和R上成立的FD集F,先求出F的最小依赖集,然后再把最小依赖集中那些左部一样的FD用合并性合并起来。
②对最小依赖集中,每个FDX→Y去构成一个模式XY。
③在构成的模式集中,如果每个模式都不包含R的候选键,那么把候选键作为一个模式放入模式集中。
这样得到的模式集是关系模式R的一个分解,并且这个分界既是无损分解,又能保持FD。
检验无损联接性的方法:
输入:
关系模式R〔A1,A2,…,An〕,它的函数依赖集F以及分解ρ={R1,R2,…,Rk}。
输出:
确定ρ是否具有无损联接性。
设关系模式R〔U,F〕:
(1)构造一个k行n列的表,假设i行对应于关系模式Ri,第j列对应于属性Aj。
如果Aj∈Ri,那么在第i行第j列上放符号aj,否那么放符号bij。
(2)逐个检查F中的每一个函数依赖,并修改表中的元素。
其方法如下:
取F中一个函数依赖X—>Y,在X的分量中寻找一样的行,然后将这些行中Y的分量改为一样的符号,如果其中有aj,那么将bij改为aj;假设其中无aj,那么改为bij。
这样反复进展,如果发现某一行变成了a1,a2,…,ak,那么分解ρ具有无损联接性;如果F中所有函数依赖都不能再修改表中的容,且没有发现这样的行,那么分解ρ不具有无损联接性。
例1:
对于上例的关系模式R〔U,F〕,将其无损联接性和依赖保持性分解为3NF。
解:
依据算法:
(1)由上例求出依赖保持性分解为:
ρ={CSG,CT,THR,HRC,HSR}
(2)判断其无损联接性如以下图所示:
Ri
C
T
H
R
S
G
CSG
a1
b12
b13
b14
a5
a6
CT
a1
a2
b23
b24
b25
b26
THR
b31
a2
a3
a4
b35
b36
HRC
a1
b42
a3
a4
b45
b46
HSR
b51
b52
a3
a4
a5
b56
(在F={CS→G,C→T,TH→R,HR→C,HS→R}
①看CS上一样的,再改G的成分——没有
看C上一样的,再改T的成分——2个a2①
看TH上一样的,再改R的成分——没有
看HR上一样的,再改C的成分——2个a1①
看HS上一样的,再改R的成分——没有
②再看CS上一样的,再改G的成分——有一个a6②
看C上一样的,再改T的成分——有一个a2②,其它未发生变化,略〕
Ri
C
T
H
R
S
G
CSG
a1
a2①
b13
b14
a5
a6
CT
a1
a2
b23
b24
b25
b26
THR
a1①
a2
a3
a4
b35
b36
HRC
a1
a2①
a3
a4
b45
b46
HSR
a1①
a2②
a3
a4
a5
a6②
Ri
C
T
H
R
S
G
CSG
a1
a2
b13
b14
a5
a6
CT
a1
a2
b23
b24
b25
b26
THR
b31
a2
a3
a4
b35
b36
HRC
a1
a2
a3
a4
b45
b46
HSR
a1
a2
a3
a4
a5
a6
(3)不执行。
(4〕由于表中有一行从a1,a2,…,a6全满,由此可知,ρ具有无损联接性,
输出ρ={CSG,CT,THR,HRC,HSR}。
例2:
,U={A,B,C,D},F={A—>B,A-->C,BC—>D,D-->A}
判断一个分解ρ={AB,AC,BCD,DA}是否具有无损联接性。
Ri
A
B
C
D
AB
a1
a2
b13
b14
AC
a1
b22
a3
a4
BCD
b41
a2
a3
a4
DA
a1
b42
b43
a4
由于,A—>B,b22→a2,b42→a2
A-->C,b13→a3,b23→a3,b43→a3
BC—>D,b14→a4
D-->A,b41→a1
Ri
A
B
C
D
AB
a1
a2
a3
a4
AC
a1
a2
a3
a4
BCD
a1
a2
a3
a4
DA
a1
a2
a3
a4
所以,ρ={AB,AD,BCD,DA}具有无损联接性。
例3:
设有关系模式R〔U,F〕,其中:
U={A,C,B},F={A—>B,C-->B}
判断一个分解ρ={AC,BC}是否具有无损联接性。
解:
ρ的无损联接性判断结果表如下所示:
由此判断具有无损联接性。
Ri
A
B
C
AC
a1
b12
a3
BC
b21
a2
a3
由于,A—>B没有变化,C-->B
Ri
A
B
C
AC
a1
a2
a3
BC
b21
a2
a3
所以,ρ={AC,BC}具有无损联接性。
例4:
设有关系模式R〔A,,B,C,D〕,其上的函数依赖集:
F={A→C,C→A,B→AC,D→AC}
〔1〕计算(AD)+。
〔2〕求F的最小等价依赖集Fm。
〔3〕求R的关键字。
(4)将R分解使其满足BCNF且无损连接性。
〔5〕将R分解成满足3NF并具有无损连接性与保持依赖性。
解:
(1)令X={AD},,X(0)=AD,X
(1)=ACD,X
(2)=ACD,故(AD)+=ACD。
(2)将F中的依赖右部属性单一化:
A→CC→A
F1=B→A
D→A
在F1中去掉多余的函数依赖:
∵B→A,A→C∴B→C是多余的。
又∵D→A,A→C∴D→C是多余的。
A→CC→A
F2=B→AD→A
函数依赖集的最小集不是惟一的,此题中还可以有其他答案。
∵F2中所有依赖的左部却是单属性,∴不存在依赖左部有多余的属性。
∴
A→CC→A
Fˊ=B→AD→A
〔3〕∵BD在F中所有函数依赖的右部均未出现,∴候选关键字中一定包含BD,而〔BD〕+=ABCD,因此,BD是R惟一的候选关键字。
〔4〕考虑A→C,∵AC不是BCNF(AC不包含候选关键字BD),将ABCD分解为AC和ABD。
AC已是BCNF,进一步分解ABD,选择B→A,把ABD分解为AB和BD。
此时AB和BD均为BCNF,∴ρ={AC,AB,BD}。
〔5〕由〔2〕可求出满足3NF的具有依赖保持性的为ρ={AC,BA,DA}。
判断其无损连接性如图4.10所示的表,由此可知ρ不具有无损连接性。
令ρ=ρ∪{BD},BD是R的候选关键字,∴ρ={AC,BA,DA,BD}。
Ri
A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 范式 关系 模式 示例