模式分解练习题.docx
- 文档编号:6482086
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:25
- 大小:38.81KB
模式分解练习题.docx
《模式分解练习题.docx》由会员分享,可在线阅读,更多相关《模式分解练习题.docx(25页珍藏版)》请在冰豆网上搜索。
模式分解练习题
有关模式分解题目重点放在三范式的分解上,包括分解算法及无损连接性的判断,这类题目的解题步骤一般分为三步:
第一步、将已有的函数依赖集转化为最小的函数依赖集(我们已经练习很多,不再多讲)
第二步、进行三范式分解(分解算法见书P192——算法5.3)
第三步、判断分解是否具有无损连接性(分解算法见书P190——算法5.2)
一、已知关系模式R(U,F),U=(A,B,C,D,E,G);F={AB→C,D→EG,C→A,BE→C,BC→D,CG→BD,ACD→B,CE→AG};试求最小依赖集,然后采用模式分解算法将其进行规范化处理,规范为三范式,并用算法说明该分解是否具有无损连接性。
1、求最小函数依赖集
(1)利用分解规则,将F中所有函数依赖变成右边是单个属性的函数依赖,得:
F1={AB→C,D→E,D→G,C→A,BE→C,BC→D,CG→B,CG→D,ACD→B,CE→A,CE→G}
(2)去掉F1中多余的函数依赖:
对AB→C,在F1-{AB→C}中计算(AB)G+=AB
∵C∈AB,∴AB→C不是多余的函数依赖,不能去掉
对D→E,在F1-{D→E}中计算(D)G+=DG
∵E∈DG,∴D→E不是多余的函数依赖,不能去掉
对D→G,在F1-{D→G}中计算(D)G+=DE
∵G∈DE,∴D→G不是多余的函数依赖,不能去掉
对C→A,在F1-{C→A}中计算(C)G+=C
∵A∈C,∴C→A不是多余的函数依赖,不能去掉
对BE→C,在F1-{BE→C}中计算(BE)G+=BE
∵C∈BE,∴BE→C不是多余的函数依赖,不能去掉
对BC→D,在F1-{BC→D}中计算(BC)G+=ABC
∵D∈ABC,∴BC→D不是多余的函数依赖,不能去掉
对CG→B,在F1-{CG→B}中计算(CG)G+=ABCDEG
∵B∈ABCDEG,∴CG→B是多余的函数依赖,可以去掉
对CG→D,在F1-{CG→D,CG→B}中计算(CG)G+=ACG
∵D∈ACG,∴CG→D不是多余的函数依赖,不能去掉
对ACD→B,在F1-{ACD→B,CG→B}中计算(ACD)G+=ACDEG
∵B∈ACDEG,∴ACD→B不是多余的函数依赖,不能去掉
对CE→A,在F1-{CE→A,CG→B}中计算(CE)G+=ABCDEG
∵A∈ABCDEG,∴CE→A是多余的函数依赖,可以去掉
对CE→G,在F1-{CE→G,CG→B,CE→A}中计算(CE)G+=ACE
∵G∈ACE,∴CE→G不是多余的函数依赖,不能去掉
经上述计算得:
F2={AB→C,D→E,D→G,C→A,BE→C,BC→D,CG→D,ACD→B,CE→G}
(3)去掉F2中函数依赖左部多余的属性:
对AB→C,在F2中分别计算
对于A,求(B)F+=B,∵C∈B,∴A不是多余的属性,不可以去掉
对于B,求(A)F+=A,∵C∈A,∴B不是多余的属性,不可以去掉
对BE→C,在F2中分别计算
对于B,求(E)F+=E,∵C∈E,∴B不是多余的属性,不可以去掉
对于E,求(B)F+=B,∵C∈B,∴E不是多余的属性,不可以去掉
对BC→D,在F2中分别计算
对于B,求(C)F+=AC,∵D∈AC,∴B不是多余的属性,不可以去掉
对于C,求(B)F+=B,∵C∈B,∴C不是多余的属性,不可以去掉
对CG→D,在F2中分别计算
对于C,求(G)F+=G,∵D∈G=(G)+,∴C不是多余的属性,不可以去掉
对于G,求(C)F+=AC,∵D∈AC=(C)+,∴C不是多余的属性,不可以去掉
对ACD→B,在F2中分别计算
对于A,求(CD)F+=ABCDEG,∵B∈ABCDEG=(CD)+,∴A是多余的属性,可以去掉
F2={AB→C,D→E,D→G,C→A,BE→C,BC→D,CG→D,CD→B,CE→G}
对CD→B,在F2中分别计算
对于C,求(D)+=DEG,∵B∈DEG,∴C不是多余的属性,不可以去掉
对于D,求(C)+=AC,∵B∈AC,∴D不是多余的属性,不可以去掉
对CE→G,在F2中分别计算
对于C,求(E)+=E,∵G∈E=(E)+,∴C不是多余的属性,不可以去掉
对于E,求(C)+=AC,∵G∈AC=(C)+,∴E不是多余的属性,不可以去掉
最终得最小的函数依赖集:
Fm={AB→C,D→E,D→G,C→A,BE→C,BC→D,CG→D,CD→B,CE→G}
2、规范化处理分解为三范式
(1)找在Fm中不出现的属性,没有;
(2)在Fm中找X→A,XA=U,没有;
(3)对Fm按具有相同左部的原则分解为:
ρ={ABC,DEG,BCE,BCD,CDG,,CEG}
分解为三范式后的结果为:
R1(A,B,C)
R2(D,E,G)
R3(B,C,E)
R4(B,C,D)
R5(C,D,G)
R6(C,E,G)
3、判断该分解是否具有无损连接性
首先构造初始表,如下图:
属性
模式
A
B
C
D
E
G
R1(A,B,C)
A1
A2
A3
B14
B15
B16
R2(D,E,G)
B21
B22
B23
A4
A5
A6
R3(B,C,E)
B31
A2
A3
B34
A5
B36
R4(B,C,D)
B41
A2
A3
A4
B45
B46
R5(C,D,G)
B51
B62
A3
A4
B55
A6
R6(C,E,G)
B61
B62
A3
A4
B55
A6
由BC→D可以把B14、B34改为A4,由BC→E可以把B15、B45改为A5,由D→G可以把B16、B36、B46改为A6,此时表中第一行为A1、A2、A3、A4、A5、A6,所以此分解具有无损连接性。
属性
模式
A
B
C
D
E
G
R1(A,B,C)
A1
A2
A3
A4
A5
A6
R2(D,E,G)
B21
B22
B23
A4
A5
A6
R3(B,C,E)
B31
A2
A3
A4
A5
A6
R4(B,C,D)
B41
A2
A3
A4
A5
A6
R5(C,D,G)
B51
B62
A3
A4
B55
A6
R6(C,E,G)
B61
B62
A3
A4
B55
A6
二.已知R,其中U=(A,B,C,D,E,F,G,H,I,J)满足下列函数依赖:
F={AB→E,ABE→FG,B→FI,C→J,CJ→I,G→H},试求最小依赖集,然后采用模式分解算法将其进行规范化处理,规范为三范式,并用算法说明该分解是否具有无损连接性。
1、求最小函数依赖集
(1)利用分解规则,将F中所有函数依赖变成右边是单个属性的函数依赖,得:
F1={AB→E,ABE→G,ABE→F,B→F,B→I,C→J,CJ→I,G→H}
(2)去掉F1中多余的函数依赖:
对AB→E,在F1-{AB→E}中计算(AB)+=ABFI
∵E∈ABFI,∴AB→E不是多余的函数依赖,不能去掉
对ABE→G,在F1-{ABE→G}中计算(ABE)+=ABEFI
∵G∈ABEFI,∴ABE→G不是多余的函数依赖,不能去掉
对ABE→F,在F1-{ABE→F}中计算(ABE)+=ABEFGIH
∵F∈ABEFGIH,∴ABE→F是多余的函数依赖,可以去掉
对B→F,在F1-{B→F}中计算(B)+=BI
∵F∈BI,∴B→F不是多余的函数依赖,不能去掉
对B→I,在F1-{B→I}中计算(B)+=BF
∵I∈BF,∴B→I不是多余的函数依赖,不能去掉
对C→J,在F1-{C→J}中计算(C)+=C
∵F∈C,∴C→J不是多余的函数依赖,不能去掉
对CJ→I,在F1-{CJ→I}中计算(CJ)+=CJ
∵I∈CJ,∴CJ→I不是多余的函数依赖,不能去掉
对G→H,在F1-{G→H}中计算(G)+=G
∵H∈G,∴G→H不是多余的函数依赖,不能去掉
经上述计算得:
F1={AB→E,ABE→G,B→F,B→I,C→J,CJ→I,G→H}
(3)去掉F2中函数依赖左部多余的属性:
对AB→E,在F2中分别计算
对于A,求(B)+=BFI,∵E∈BFI=(B)+,∴A不是多余的属性,不可以去掉
对于B,求(A)+=A,∵C∈A=(A)+,∴B不是多余的属性,不可以去掉
对ABE→G,在F2中分别计算
对于A,求(BE)+=BEFI,∵G∈BEFI=(BE)+,∴A不是多余的属性,不可以去掉
对于B,求(AE)+=AE,∵G∈AE=(AE)+,∴B不是多余的属性,不可以去掉
对于E,求(AB)+=ABEFGIH,∵G∈ABEFGIH,∴E是多余的属性,可以去掉
用AB→G取代ABE→G
对CJ→I,在F2中分别计算
对于C,求(J)+=J,∵I∈J=(J)+,∴C不是多余的属性,不可以去掉
对于J,求(C)+=CIJ,∵I∈CIJ=(C)+,∴C是多余属性,可以去掉
用C→I取代CJ→I
最终得最小的函数依赖集:
Fm={AB→E,AB→G,B→F,B→I,C→J,C→I,G→H}
2、规范化处理分解为三范式
(1)找在Fm中不出现的属性,D没有出现过,将其从U中去掉得:
U=(A,B,C,E,F,G,H,I,J);
(2)在Fm中找X→A,XA=U,没有;
(3)对Fm按具有相同左部的原则分解为:
ρ={ABEG,BFI,CIJ,GH}
分解为三范式后的结果为:
R1(A,B,E,G)
R2(B,F,I)
R3(C,I,J)
R4(G,H)
3、判断该分解是否具有无损连接性
首先构造初始表,如下图
属性
模式
A
B
C
E
F
G
H
I
J
R1(A,B,E,G)
A1
A2
B13
A4
B15
A6
B17
B18
B19
R2(B,F,I)
B21
A2
B23
B24
A5
B26
B27
A8
B29
R3(C,I,J)
B31
B32
A3
B34
B35
B36
B37
A8
A9
R4(G,H)
B41
B42
B43
B44
B45
A6
A7
B48
B49
由B→F可以把B15改为A5,由B→I可以把B18改为A8,由G→H可以把B17改为A7,而对于C→J、C→I、AB→E、AB→G,表不改变,所以此分解不具有无损连接性。
属性
模式
A
B
C
E
F
G
H
I
J
R1(A,B,E,G)
A1
A2
B13
A4
A5
A6
A7
A8
B19
R2(B,F,I)
B21
A2
B23
B24
A5
B26
B27
A8
B29
R3(C,I,J)
B31
B32
A3
B34
B35
B36
B37
A8
A9
R4(G,H)
B41
B42
B43
B44
B45
A6
A7
B48
B49
三.设一关系模式R,其中U={c,t,h,r,s,g,q},F={c→tq,cs→g,ht→r,hr→c,hs→r},试求最小依赖集,然后采用模式分解算法将其进行规范化处理,规范为三范式,并用算法说明该分解是否具有无损连接性。
1、求最小函数依赖集
(1)利用分解规则,将F中所有函数依赖变成右边是单个属性的函数依赖,得:
F1={c→t,c→q,cs→g,ht→r,hr→c,hs→r}
(2)去掉F1中多余的函数依赖:
对c→t,在F1-{c→t}中计算(c)+=cq
∵t∈cq,∴c→t不是多余的函数依赖,不能去掉
对c→q,在F1-{c→q}中计算(c)+=ct
∵q∈ct,∴c→q不是多余的函数依赖,不能去掉
对cs→g,在F1-{cs→g}中计算(cs)+=cstq
∵g∈cstq,∴cs→g不是多余的函数依赖,不能去掉
对ht→r,在F1-{ht→r}中计算(ht)+=ht
∵r∈ht,∴ht→r不是多余的函数依赖,不能去掉
对hr→c,在F1-{hr→c}中计算(hr)+=hr
∵c∈hr,∴hr→c不是多余的函数依赖,不能去掉
对hs→r,在F1-{hs→r}中计算(hs)+=hs
∵r∈C,∴hs→r不是多余的函数依赖,不能去掉
经上述计算得:
F2={c→t,c→q,cs→g,ht→r,hr→c,hs→r}
(3)去掉F2中函数依赖左部多余的属性:
对cs→g,在F2中分别计算
对于c,求(s)+=s,∵g∈s=(s)+,∴c不是多余的属性,不可以去掉
对于s,求(c)+=ctq,∵g∈ctq=(c)+,∴s不是多余的属性,不可以去掉
对ht→r,在F2中分别计算
对于h,求(t)+=t,∵r∈t=(t)+,∴h不是多余的属性,不可以去掉
对于t,求(h)+=h,∵r∈h=(h)+,∴t不是多余的属性,不可以去掉
对hr→c,在F2中分别计算
对于h,求(r)+=r,∵c∈r=(r)+,∴h不是多余的属性,不可以去掉
对于r,求(h)+=h,∵c∈h=(h)+,∴r不是多余的属性,不可以去掉
对hs→r,在F2中分别计算
对于h,求(s)+=s,∵r∈s=(s)+,∴h不是多余的属性,不可以去掉
对于s,求(h)+=h,∵r∈h=(h)+,∴s不是多余的属性,不可以去掉
最终得最小的函数依赖集:
Fm={c→t,c→q,cs→g,ht→r,hr→c,hs→r}
2、规范化处理分解为三范式
(1)找在Fm中不出现的属性,没有
(2)在Fm中找X→A,XA=U,没有
(3)对Fm按具有相同左部的原则分解为:
ρ={ctq,csg,htr,hrc,hsr}
分解为三范式后的结果为:
R1(c,t,q),R2(c,s,g),R3(h,t,r),R4(h,r,c),R5(h,s,r)
3、判断该分解是否具有无损连接性
首先构造初始表,如下图
属性
模式
c
t
h
r
s
g
q
R1(c,t,q)
a1
a2
b13
b14
b15
b16
a7
R2(c,s,g)
a1
b22
b23
b24
a5
a6
b27
R3(h,t,r)
b31
a2
a3
a4
b35
b36
b37
R4(h,r,c)
a1
b42
a3
a4
b45
b46
b47
R5(h,s,r)
b51
b52
a3
a4
a5
b56
b57
由hr→c可以把b31、b51改为a1,由c→t可以把b22、b42、b52改为a2,由c→q可以把b27、b27、b47、b57改为a7,由cs→g可以把b56改为a6,从而表中最后一行为a1、a2、a3、a4、a5、a6a7,所以此分解具有无损连接性。
属性
模式
c
t
h
r
s
g
q
R1(c,t,q)
a1
a2
b13
b14
b15
b16
a7
R2(c,s,g)
a1
a2
b23
b24
a5
a6
a7
R3(h,t,r)
a1
a2
a3
a4
b35
b36
a7
R4(h,r,c)
a1
a2
a3
a4
b45
b46
a7
R5(h,s,r)
a1
a2
a3
a4
a5
a6
a7
关于无损分解和保持依赖的判断,是系分和数工考试中每年基本上都会考的题,而且绝大部分是对一个关系模式分解成两个模式的考察,分解为三个以上模式时无损分解和保持依赖的判断比较复杂,考的可能性不大,因此我们只对“一个关系模式分解成两个模式”这种类型的题的相关判断做一个总结。
以下的论述都基于这样一个前提:
R是具有函数依赖集F的关系模式,(R1,R2)是R的一个分解。
首先我们给出一个看似无关却非常重要的概念:
属性集的闭包。
令α为一属性集。
我们称在函数依赖集F下由α函数确定的所有属性的集合为F下α的闭包,记为α+。
下面给出一个计算α+的算法,该算法的输入是函数依赖集F和属性集α,输出存储在变量result中。
算法一:
result:
=α;
while(result发生变化)do
foreach函数依赖β→γinFdo
begin
ifβ∈resultthenresult:
=result∪γ;
end
属性集闭包的计算有以下两个常用用途:
·判断α是否为超码,通过计算α+(α在F下的闭包),看α+是否包含了R中的所有属性。
若是,则α为R的超码。
·通过检验是否β∈α+,来验证函数依赖是否成立。
也就是说,用属性闭包计算α+,看它是否包含β。
(请原谅我用∈符号来表示两个集合之间的包含关系,那个表示包含的符号我找不到,大家知道是什么意思就行了。
)
●给定关系R(A1,A2,A3,A4)上的函数依赖集F={A1→A2,A3→A2,A2→A3,A2→A4},R的候选关键字为________。
(37)A.A1 B.A1A3 C.A1A3A4 D.A1A2A3
首先我们按照上面的算法计算A1+。
result=A1,
由于A1→A2,A1∈result,所以result=result∪A2=A1A2
由于A2→A3,A2∈result,所以result=result∪A3=A1A2A3
由于A2→A4,A2∈result,所以result=result∪A3=A1A2A3A4
由于A3→A2,A3∈result,所以result=result∪A2=A1A2A3A4
通过计算我们看到,A1+=result={A1A2A3A4},所以A1是R的超码,理所当然是R的候选关键字。
此题选A。
无损分解的判断。
如果R1∩R2是R1或R2的超码,则R上的分解(R1,R2)是无损分解。
这是一个充分条件,当所有的约束都是函数依赖时它才是必要条件(例如多值依赖就是一种非函数依赖的约束),不过这已经足够了。
保持依赖的判断。
如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的(这是一个充分条件)。
如果上述判断失败,并不能断言分解不是保持依赖的,还要使用下面的通用方法来做进一步判断。
该方法的表述如下:
算法二:
对F上的每一个α→β使用下面的过程:
result:
=α;
while(result发生变化)do
foreach分解后的Ri
t=(result∩Ri)+∩Ri//(result∩Ri)+表示result∩Ri的闭包
result=result∪t
这里的属性闭包是在函数依赖集F下计算出来的。
如果result中包含了β的所有属性,则函数依赖α→β。
分解是保持依赖的当且仅当上述过程中F的所有依赖都被保持。
●设关系模式R,其中U={A,B,C,D,E},F={A→BC,C→D,BC→E,E→A},则分解ρ={R1(ABCE),R2(CD)}满足(43)。
(43)A.具有无损连接性、保持函数依赖
B.不具有无损连接性、保持函数依赖
C.具有无损连接性、不保持函数依赖
D.不具有无损连接性、不保持函数依赖
先做无损链接的判断。
R1∩R2={C},计算C+。
Result=C
由于C→D,C∈result,所以result=result∪D=CD
可见C是R2的超码,该分解是一个无损分解。
再做保持依赖的判断。
A→BC,BC→E,E→A都在R1上成立(也就是说每一个函数依赖左右两边的属性都在R1中),C→D在R2上成立,因此给分解是保持依赖的。
选A。
●给定关系模式R,U={A,B,C,D,E},F={B→A,D→A,A→E,AC→B},其候选关键字为
(40) ,则分解ρ={R1(ABCE),R2(CD)}满足(41)。
(40)A.ABD
B.ABE
C.ACD
D.CD
(41)A.具有无损连接性、保持函数依赖
B.不具有无损连接性、保持函数依赖
C.具有无损连接性、不保持函数依赖
D.不具有无损连接性、不保持函数依赖
看见了吧,和前面一题多么的相像!
对于第一问,分别计算ABCD四个选项的闭包,
(ABD)+={ABDE}
(ABE)+={ABE}
(ACD)+={ABCDE}
(CD)+={ABCDE}
选D。
再看第二问。
先做无损链接的判断。
R1∩R2={C},计算C+。
result=C
因此C既不是R1也不是R2的超码,该分解不具有无损分解性。
再做保持依赖的判断。
B→A,A→E,AC→B在R1上成立,D→A在R1和R2上都不成立,因此需做进一步判断。
由于B→A,A→E,AC→B都是被保持的(因为它们的元素都在R1中),因此我们要判断的是D→A是不是也被保持。
对于D→A应用算法二:
result=D
对R1,result∩R1=ф(空集,找不到空集的符号,就用这个表示吧),t=ф,result=D
再对R2,result∩R2=D,D+=ADE,t=D+∩R2=D
一个循环后result未发生变化,因此最后result=D,并未包含A,所以D→A未被保持,该分解不是保持依赖的。
选D。
名词解释
(1)函数依赖:
FD(functiondependency),设有关系模式R(U),X,Y是U的子集,r是R的任一具体关系,如果对r的任意两个元组t1,t2,由t1[X]=t2[X]导致t1[Y]=t2[Y],则称X函数决定Y,或Y函数依赖于X,记为X→Y。
X→Y为模式R的一个函数依赖。
(2)平凡的函数依赖:
对于FDX→Y,如果Y∈X那么称X→Y是一个“平凡的函数依赖”,否则称为“非平凡的FD”。
(3)函数依赖集F的闭包F+:
被逻辑蕴涵的函数依赖的全体构成的集合,称为F
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模式 分解 练习题