1.设有关系模式R(E,F,G,H),函数依赖F={E→G,G→E,F→(E,G),H→(E,G),(F,H)→E}。
问题:
(1)求出R的所有候选关键字;
(2)根据函数依赖关系,确定关系模式R属于第几范式;
(3)将R分解为3NF,并保持无损连接性和函数依赖保持性;
(4)求出F的最小函数依赖集。
参考答案:
(1)R的候选关键字为:(F,H)
经分析候选码中必含有(F,H)属性,考察(F,H)
∵(F,H)→F,F→(E,G), ∴(F,H) →(E,G) ①
∵(F,H)→ (F,H) ②
由①②得,(F,H)→(E,F,G,H) ,∴(F,H)为候选码。
候选码就只有 (F,H)
(2)R为:1NF
证明:因为F->(E,G),所以F->E;又因为(F,H)->E,因此非主属性E对主属性F存在部分函数依赖,不满足2NF,因此最高达到1NF。
(3)分解为:
({E,G},{E→G,G→E })、({F,G},{F→G})、({H,G},{H→G})、({F,H},{})
或者
({E,G},{E→G,G→E })、({F,E},{F→E})、({H,E},{H→E})、({F,H},{})
或者
({E,G},{E→G,G→E })、({F,G},{F→G})、({H,E},{H→E})、({F,H},{})
或者
({E,G},{E→G,G→E })、({F,E},{F→E})、({H,G},{H→G})、({F,H},{})
(4)最小函数依赖集为:{ E→G,G→E,F→G,H→G }或者 {E→G,G→E,F→E,H→E }
按定理4.3,求最小函数依赖集步骤:
F={E→G,G→E,F→(E,G),H→(E,G),(F,H)→E}
={E→G,G→E,F→E,F→G,H→E,H→G,(F,H)→E}
={E→G,G→E,F→G,H→E,H→G,(F,H)→E}
={E→G,G→E,F→G,H→G,(F,H)→E}
Fm ={E→G,G→E,F→G,H→G}
或者
Fm ={E→G,G→E,F→E,H→E }
或者
Fm ={E→G,G→E,F→G,H→E }
或者
Fm ={E→G,G→E,F→E,H→G }
2.设有关系模式R(A,B,C,D,E),F={AB→C,C→E,A→CD}为R上的函数依赖集,试将R分解成3NF模式集,要求分解具有无损连接性和保持函数依赖性。
参考答案:
参看课本例题4.13,4.14
算法4.4 设有关系模式R,U为R的属性集,F为R上的函数依赖集。①令模式分解ρ=φ;②若存在函数依赖X→Y∈F,满足X∪Y=U,则令ρ={R},转步骤⑥;③令U0=φ,对U中的每个属性Ai,如果Ai既不出现在F中任一函数依赖的左端,也不出现在F中任一函数依赖的右端,则令U0=U0∪{Ai};以U0为属性集,构造关系模式R0,并令ρ=ρ∪{R0},U=U-U0;④若F中存在左端相同的函数依赖X→Y1,X→Y2,…,X→Yn,则对这些函数依赖进行合并,即令F=(F-{X→Y1,X→Y2,…,X→Yn})∪{X→(Y1∪Y2∪…∪Yn)};重复执行步骤④,直至F中不存在左端相同的函数依赖;⑤对F中的每个函数依赖Xi→Yi,令Ui=Xi∪Yi,以Ui为属性集构造关系模式Ri,再令ρ=ρ∪{Ri};⑥算法终止。
算法4.5 设有关系模式R,U为R的属性集,F为R上的函数依赖集。①用算法4.4对关系模式R进行分解,生成具有函数依赖保持性的模式分解ρ,此时ρ中的每个关系模式都属于3NF;②设X是R的一个候选键,以X为属性集构造关系模式RX,令ρ=ρ∪{RX};③ρ为R的一个既具有无损连接性又具有函数依赖保持性的模式分解,且ρ中的每个关系模式都属于3NF,算法终止。
解:1)先求出所有候选码。经分析候选码中必含有AB属性,先考察AB。
∵ AB→C,C→E,∴ AB→E ①;∵ AB→A,A→CD∴ AB→CD ②;∵ AB→AB ③;
由①②③得,AB→ABCDE ,∴ AB为候选码,并且候选码只有AB。
2)判断R是否已达到3NF?
显然,A、B为主属性,C、D、E为非主属性。对非主属性C来说,∵ 有A→C, ∴AB→C 为部分函数依赖,∴ R不属于2NF,∴ R最高属于1NF。
3)分解关系模式成若干都达到3NF的关系模式
先对F={AB→C,C→E,A→CD} 最小化为:
F={AB→C,C→E,A→C,A→D}(化右部仅含有一个属性)
F={A→C,C→E,A→C,A→D} (化AB→C为A→C)
F={C→E,A→C,A→D } (去冗余A→C)
接着按算法4.4对R分解为:
R(U,F)=R1({B},{ }) ∪ R2({C,E},{C→E}) ∪ R3({A,C,D},{A→C,A→D})
以上分解能保持函数依赖性,并且各关系模式均达到3NF。
先继承例4.13的求解结果,则可知R的候选键为:AB
再按算法4.5,可把R分解为:
R(U,F)=R1({B},{})∪R2({C,E},{C→E}) ∪ R3({A,C,D },{A→CD}) ∪ R4({A,B},{})
经分析{B}⊆{A,B},分解集要去掉R1,为此最终分解为:
R(U,F)= R1({A,B},{}) ∪ R2({C,E},{C→E}) ∪ R3({A,C,D },{A→CD })
则以上分解既具有无损连接性,又能保持函数依赖性,并且各关系模式均已达到3NF
3.设有关系模式R(A,B,C,D,E),F为R上的函数依赖集,试将R分解成3NF模式集,要求分解具有无损连接性和保持函数依赖性。
F={A→D,D→B}
参考答案:
按第4章算法4.4有:按③,可把R分解为:
R(U,F)=R1({C,E },{}) ∪ R2({A,B,D},{ A→D,D→B })
按⑤,可把R分解为:
R(U,F)= R1({C,E },{}) ∪ R21({A,D},{ A→D})∪R22({D,B},{D→B})
容易判断R的候选键为:ACE
再按第4章算法4.5有:可把R分解为:
R(U,F)= R1({C,E },{}) ∪ R21({A,D},{ A→D})∪R22({D,B},{D→B})∪R3({A,C,E},{})
R1 与R3可合并,合并后为:
R(U,F)= R21({A,D},{ A→D})∪R22({D,B},{D→B})∪R3({A,C,E},{})
则以上分解既具有无损连接性,又能保持函数依赖性,并各关系模式均达到3NF。
4.设有关系模式R(A,B,C,D,E),F为R上的函数依赖集,试将R分解成3NF模式集,要求分解具有无损连接性和保持函数依赖性。
F={AB→C,E→BD,C→DE}
参考答案:
Fm={AB→C,E→B,E→D,C→E}
按第4章算法4.4有:按④按⑤,可把R分解为:
R(U,F)= R1({A,B,C },{ AB→C }) ∪ R2({B,D,E},{E→BD }) ∪ R3({C,E},{C→E })
容易判断R的候选键为:AB、AC、AE
再按第4章算法4.5有:可把R分解为:
R(U,F)= R1({A,B,C },{ AB→C }) ∪ R2({B,D,E},{E→BD }) ∪ R3({C,E},{C→E }) ∪ R4({A,E},{})
则以上分解既具有无损连接性,又能保持函数依赖性,并各关系模式均达到3NF。
部分同学方法有误:按第4章算法4.4有:按按⑤,可把R分解为:
R(U,F)= R1({A,B,C },{ AB→C }) ∪ R2({B,D,E},{E→BD }) ∪ R3({C,D,E},{C→DE })
容易判断R的候选键为:AB、AC、AE
再按第4章算法4.5有:可把R分解为:
R(U,F)= R1({A,B,C },{ AB→C }) ∪ R2({B,D,E},{E→BD }) ∪ R3({C,D,E},{C→DE }) ∪ R4({A,E},{})
则以上分解既具有无损连接性,又能保持函数依赖性,并各关系模式均达到3NF。
由于没有做极小化处理,R3({C,D,E},{C→DE }) 中存在传递函数依赖,C→E,E→D,所以非主属性D传递函数依赖码C
5.设有关系模式R(A,B,C,D,E),F为R上的函数依赖集,试将R分解成3NF模式集,要求分解具有无损连接性和保持函数依赖性。
F={B→C,D→E,B→ED}
参考答案:
Fm={B→C,D→E,B→D}
按第4章算法4.4有可把R分解为:
R(U,F)=R1({A },{}) ∪ R2({B,C,D },{ B→C,B→D } ∪ R3({D,E},{ D→E})
容易判断R的候选键为:AB
再按第4章算法4.5有:可把R分解为:R(U,F)= R2({B,C,D },{ B→CD} ∪ R3({D,E},{ D→E}) ∪R1({A,B },{})
6.设有关系模式R(A,B,C,D,E),F={A→BC,B→D,D→E}为R上的函数依赖集,试将R分解成BCNF模式集,要求分解具有无损连接性。
参考答案:
分解到BCNF,具有无损连接性的模式分解算法
算法4.6 设有关系模式R,U是R的属性集,F为R上的函数依赖集。①令ρ={R};②如果ρ中各关系模式都属于BCNF,则转步骤④,否则继续;③任选ρ中不属于BCNF的关系模式Ri,设Ri的属性集为Ui,F在Ui上的投影为Fi,由于Ri不属于BCNF,则必存在函数依赖X→Y∈Fi+,其中X不是Ri的候选键,且Y⊈X。分别以属性集Ui-Y和X∪Y构造关系模式Ri’和Ri”,令ρ=(ρ-{Ri})∪{Ri’,Ri”},转步骤②;④算法终止。
按第4章算法4.6有:按①,ρ=R({A,B,C,D,E },{ A→BC,B→D,D→E })
∵ R的候选码为:A,有B→D,而B不为候选码,∴ R不属于BCNF。
按③,
1) 若取B→D,则R分为R1({B,D},{B→D}) ∪ R2({A,B,C,E},{A→BC, B→E})
其中R2不属于BCNF,继续按③处理,则R分为R1({B,D},{B→D}) ∪ R21({B,E},{B→E}) ∪ R22({A,B,C},{ A→BC }) 已均为BCNF
2)若取D→E,则R分为R1({D,E},{D→E}) ∪ R2({A,B,C, D },{A→BC, B→D })
其中R2不属于BCNF,继续按③处理, R分为R1({D,E},{D→E}) ∪ R21({B, D },{B→D }) ∪ R22({A,B,C},{ A→BC}) 已均为BCNF
7.设有关系模式R(A,B,C,D,E),F为R上的函数依赖集,试将R分解成BCNF模式集,要求分解具有无损连接性。F={AC→D,D→B,A→E}
参考答案:
按第4章算法4.6有:按①,ρ=R({A,B,C,D,E },{ AC→D,D→B,A→E })
∵ R的候选码为:AC,有D→B,而D不为候选码,∴ R不属于BCNF。
按③,
1) 若取D→B,则R分为R1({D,B},{D→B}) ∪ R2({A,C,D,E},{AC→D, A→E })
其中R2不属于BCNF,继续按③处理,则R分为R1({D,B},{D→B}) ∪ R21({A,E},{A→E}) ∪ R22({A,C,D},{AC→D}) 已均为BCNF
2)若取A→E,则R分为R1({A,E},{A→E}) ∪ R2({A,B,C,D},{AC→D, D→B })
其中R2不属于BCNF,继续按③处理,则R分为R1({A,E},{A→E}) ∪ R21({B,D},{D→B}) ∪ R22({A,C,D},{AC→D}) 已均为BCNF
8.设有关系模式R(A,B,C,D,E),F为R上的函数依赖集,试将R分解成BCNF模式集,要求分解具有无损连接性。
F={A→E,E→BC,B→D,B→A}
按第4章算法4.6有:按①,ρ=R({A,B,C,D,E },{ A→E,E→BC,B→D,B→A })
∵ R的候选码为:A, E, B,∴ R已属于BCNF。
转步骤④,算法终止。不需分解。
9.设有关系模式R(A,B,C,D,E),F为R上的函数依赖集,试将R分解成BCNF模式集,要求分解具有无损连接性。
F={B→A,D→E,C→DB}
参考答案:
按第4章算法4.6有:按①,ρ=R({A,B,C,D,E },{ B→A,D→E,C→DB })
∵ R的候选码为:C,∴ R不属于BCNF。
按③,
1) 若取B→A,则R分为R1({A,B},{B→A}) ∪ R2({B,C,D,E},{ D→E,C→DB })
其中R2不属于BCNF,继续按③处理,则R分为R1({A,B},{B→A}) ∪ R21({D,E },{ D→E }) ∪ R22({B,C,D},{ C→DB }) 已均为BCNF
2)若取D→E,则R分为R1({D,E},{D→E}) ∪ R2({A,B,C,D},{ B→A,C→DB })
其中R2不属于BCNF,继续按③处理,则R分为R1({D,E},{D→E}) ∪ R21({A,B},{ B→A }) ∪ R22({B,C,D},{ C→DB }) 已均为BCNF。结果同上。
10.设有关系模式R(A,B,C,D,E),其函数依赖集F={A→BC,BC→E,B→D,A→D,E→A}。
(1)试找出关系模式R中的所有候选关键字。
(2)该关系模式最高能够满足第几范式?
(3)若该关系模式未达到BCNF,试对其进行分解,使其最终满足BCNF范式(保持函数依赖性)。
参考答案:
1、经过分析所有属性在被决定因素上都出现过。
为此要分别考察A、BC、E、B:
先考察A
已知A→BC, A→D, ∴ A→BCD ①
∵ A→BC ,BC→E,∴ A→E ②
显然有 A→A ③
由①②③得,A->ABCDE ⑥
∴A为候选码。
∵ E→A, ∴E->ABCDE ∴E也为候选码。
∵ BC→E, ∴BC->ABCDE ∵BC子集的闭包不等于{ABCDE},所以BC也为候选码。
显然,没有B->ABCDE, ∴B不是候选码。
2、显然主属性为{A,B,C,E},非主属性为D。
∵ 存在非主属性D对候选码BC有部分函数依赖存在,∴ R属于1NF
3、下面是对R的一种可能分解,分解后的关系模式都满足BCNF范式。
F={A→BC,BC→E,B→D, A→D,E→A}
FM={A→B, A→C, BC→E,B→D, E→A }
采用算法4.4
R1({A,B,C},{A→BC})
R2({B,C, E},{ BC→E})
R3({B,D},{B→D})
R4({E,A},{E→A})
如此R1、R2、R3、R4均达到了BCNF。
或者另一种分解:
R1({B,D},{B→D})
R2({A,B,C,E},{A→BC,BC→E,E→A})
11.设有关系模式R(A,B,C,D,E),其函数依赖集F={A→BC,BCD→E,B→D,A→D,E→A }。
(1)试找出关系模式R中的所有候选关键字。
(2)该关系模式最高能够满足第几范式?
(3)若该关系模式未达到BCNF,试对其进行分解,使其最终满足BCNF范式(保持函数依赖性)。
参考答案:
1、经过分析所有属性在被决定因素上都出现过。
为此要分别考察A、BCD、E、B:
先考察A
已知A→BC, A→D, ∴ A→BCD ①
∵ A→BCD ,BCD→E,∴ A→E ②
显然有 A→A ③
由①②③得,A->ABCDE ⑥
∴A为候选码。
∵ E→A, ∴E->ABCDE ∴E也为候选码。
∵ BCD→E, ∴BCD->ABCDE ∵BC闭包={ABCDE},所以BC也为候选码。
显然,没有B->ABCDE, ∴B不是候选码。
2、显然主属性为{A,B,C,E},非主属性为D。
∵ 有非主属性对任候选码有部分,∴ R属于1NF
3、下面是对R的一种可能分解,分解后的关系模式都满足BCNF范式。
F={A→BC,BCD→E,B→D,A→D,E→A}
FM={A→B, A→C, BC→E,B→D,E→A }
R1({A,B,C},{A→BC})
R2({B,C,E},{ BC→E})
R3({B,D},{B→D})
R4({E,A},{E→A})
如此R1、R2、R3、R4均达到了BCNF。