数据库系统概论——最小依赖集
文章目录
1.求F={A->B,B->A,B->C,A->C,C->A}的最小依赖集(从左到右的顺序)
(1)在F中找到右部为不止一个属性的函数依赖,将其取代为
//例:A->BC应该被取代为A->B,A->C
由于F中无右部为不止一个属性的函数依赖,
F={A->B,B->A,B->C,A->C,C->A}
(2)
①选取函数依赖A->B,令G=F-{A->B}={B->A,B->C,A->C,C->A}
求AG+
X(0)=A i=0
在G中找到左部为X(0)的子集的函数依赖:A->C
X(1)=X(0)∪C=AC X(0)≠X(1)
在G中找到左部为X(1)的子集的函数依赖:A->C,C->A
X(2)=X(1)∪AC=AC X(1)=X(2)
故AG+=AC
而B不属于AC,故A->B保留
F={A->B,B->A,B->C,A->C,C->A}
②选取函数依赖B->A,令G=F-{B->A}={A->B,B->C,A->C,C->A}
求BG+
X(0)=B i=0
在G中找到左部为X(0)的子集的函数依赖:B->C
X(1)=X(0)∪C=BC X(0)≠X(1)
在G中找到左部为X(1)的子集的函数依赖:B->C,C->A
X(2)=X(1)∪AC=ABC X(2)=U
故BG+=ABC
A属于ABC,故B->A舍弃
F={A->B,B->C,A->C,C->A}
③选取函数依赖B->C,令G=F-{B->C}={A->B,A->C,C->A}
求BG+
X(0)=B i=0
在G中找到左部为X(0)的子集的函数依赖:无
X(1)=X(0)∪∅=B X(0)=X(1)
故BG+=B
C不属于B,故B->C保留
F={A->B,B->C,A->C,C->A}
④选取函数依赖A->C,令G=F-{A->C}={A->B,B->C,C->A}
求AG+
X(0)=A i=0
在G中找到左部为X(0)的子集的函数依赖:A->B
X(1)=X(0)∪B=AB X(0) ≠X(1)
在G中找到左部为X(1)的子集的函数依赖:A->B,B->C
X(2)=X(1)∪BC=ABC X(2)=U
故AG+=ABC
C属于ABC,故A->C舍弃
F={A->B,B->C,C->A}
⑤选取函数依赖C->A,令G=F-{C->A}={A->B,B->C}
求CG+
X(0)=C i=0
在G中找到左部为X(0)的子集的函数依赖:无
X(1)=X(0)∪∅=C X(0) =X(1)
故CG+=C
A不属于C,故C->A保留
F={A->B,B->C,C->A}
(3)
F中无左部为不止一个属性的函数依赖,这一步无需考察
得F的一个最小依赖集Fm={A->B,B->C,C->A}
2.求F={A->BC,ABD->CE,E->D}的最小依赖集(从左到右的顺序)
(1)
在F中找到右部为不止一个属性的函数依赖A->BC,将其取代为A->B,A->C
ABD->CE将其取代为ABD->C,ABD->E
F={A->B,A->C,ABD->C,ABD->E,E->D}
(2)
①选取函数依赖A->B,令G=F-{A->B}={ A->C,ABD->C,ABD->E,E-D}
求AG+
X(0)=A i=0
在G中找到左部为X(0)的子集的函数依赖:A->C
X(1)=X(0)∪C=AC X(0)≠X(1)
在G中找到左部为X(1)的子集的函数依赖:A->C
X(2)=X(1)∪C=AC X(1)=X(2)
故AG+=AC
而B不属于AC,故A->B保留
F={ A->B,A->C,ABD->C,ABD->E,E->D }
②选取函数依赖A->C,令G=F-{A->C}={ A->B, ABD->C,ABD->E,E->D }
求AG+
X(0)=A i=0
在G中找到左部为X(0)的子集的函数依赖:A->B
X(1)=X(0)∪B=AB X(0)≠X(1)
在G中找到左部为X(1)的子集的函数依赖:A->B
X(2)=X(1)∪B=AB X(2)= X(1)
故AG+=AB
C不属于AB,故A->C保留
F={ A->B,A->C,ABD->C,ABD->E,E->D }
③选取函数依赖ABD->C,令G=F-{ ABD->C }={ A->B,A->C,ABD->E,E->D}
求BG+
X(0)=ABD i=0
在G中找到左部为X(0)的子集的函数依赖:A->B,A->C,ABD->E
X(1)=X(0)∪BCE=ABCDE X(1)=U
故BG+=ABCDE
C属于ABCDE,故ABD->C丢弃
F={ A->B,A->C, ABD->E,E->D}
④选取函数依赖ABD->E,令G=F-{ ABD->E }={ A->B,A->C,E->D }
求ABDG+
X(0)=ABD i=0
在G中找到左部为X(0)的子集的函数依赖:A->B,A->C
X(1)=X(0)∪BC=ABCD X(0) ≠X(1)
在G中找到左部为X(1)的子集的函数依赖:A->B,A->C
X(2)=X(1)∪BC=ABCD X(2)= X(1)
故ABDG+=ABCD
E属于ABCD,故ABD->E保留
F={ A->B,A->C, ABD->E,E->D }
⑤选取函数依赖E->D,令G=F-{ E->D }={ A->B,A->C, ABD->E }
求EG+
X(0)=E i=0
在G中找到左部为X(0)的子集的函数依赖:无
X(1)=X(0)∪∅=E X(0) =X(1)
故EG+=E
D不属于E,故E->D保留
F={ A->B,A->C, ABD->E,E->D }
(3)
F中无左部为不止一个属性的函数依赖ABD->E,
①选取A
求BDF+
X(0)=BD i=0
在F中找到左部为X(0)的子集的函数依赖:无
X(1)=X(0)∪∅=BD X(0) =X(1)
故BDF+=BD
E不属于BD
F={ A->B,A->C, ABD->E,E->D }
②选取B
求ADF+
X(0)=AD i=0
在F中找到左部为X(0)的子集的函数依赖:A->B,A->C
X(1)=X(0)∪BC=ABCD X(0)≠X(1)
在F中找到左部为X(1)的子集的函数依赖:A->B,A->C, ABD->E
X(2)=X(1)∪BCE=ABCDE X(2)=U
故ADF+= ABCDE
E属于ABCDE,故可以用AD取代ABD,从而用AD->E取代ABD->E
F={ A->B,A->C, AD->E,E->D }
③选取D
求AF+
X(0)=A i=0
在F中找到左部为X(0)的子集的函数依赖:A->B,A->C
X(1)=X(0)∪BC=ABC X(0)≠X(1)
在F中找到左部为X(1)的子集的函数依赖:A->B,A->C
X(2)=X(1)∪BC=ABC X(2)= X(1)
故AF+= ABC
E不属于ABC
F={ A->B,A->C, AD->E,E->D }
得F的一个最小依赖集Fm={ A->B,A->C, AD->E,E->D}
3.参考文献
[1]王珊,萨师煊.数据库系统概论(第五版)[M].北京:高等教育出版社,2014.