数据库:求F={A→B,B→A,B→C,A→C,C→A},最小(极小)函数依赖集合

发布时间:2019-09-03 00:28:51

数据库:求F={A→B,B→A,B→C,A→C,C→A},最小(极小)函数依赖集合

推荐回答

数据库:求F={A→B,B→A,B→C,A→C,C→A},最小(极小)函数依赖集合要解答此问题我们先来了解一下概念:如果函数依赖集F满足以下条件,则称F为一个极小函数依赖集。也称为最小依赖集或最小覆盖。(1)F中任一函数依赖的右部仅含有一个属性。(2)F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}U{Z→A}与F等价。然后我们再来看一下通用解答步骤:① 用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性;② 去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,然后在剩下的函数依赖中求X的闭包X+,看X+是否包含Y,若是,则去掉X→Y;否则不能去掉,依次做下去。直到找不到冗余的函数依赖;③ 去掉各依赖左部多余的属性。一个一个地检查函数依赖左部非单个属性的依赖。例如XY→A,若要判Y为多余的,则以X→A代替XY→A是否等价?若A属于(X)+,则Y是多余属性,可以去掉。下面我们来解答以下楼主提出的这个问题:1、利用分解规则,将所有的函数依赖变成右边都是单个属性的函数依赖。从题目来看,F中的任何一个函数依赖的右部仅含有一个属性:{A→B,B→A,B→C,A→C,C→A},跳过第二步直接进行第三步。2、去掉F中多余的函数依赖(1)设A→B冗余,从F中去掉A→B,则F1={B→A,B→C,A→C,C→A}。计算(A)F1+:设X(0)=A,计算X(1):扫描F1中各个函数依赖,找到左部为A或A子集的函数依赖,A→C。故有X(1)=X(0)U C=AC;扫描F1中各个函数依赖,找到左部为AC或为AC子集的函数依赖,C→A,X(2)=X(1)U C=AC.但AC不包含B,故A->B不能从F中去掉。(2)设B→A冗余,从F中去掉B→A,则F2={A→B,B→C,A→C,C→A}。计算(B)F2+:设X(0)=B,计算X(1):扫描F2中各个函数依赖,找到左部为B或者B子集的函数依赖,B→C.故有X(1)=X(0)U C =BC;扫描F2中各个函数依赖,找到左部为BC或为BC子集的函数依赖,C->A,X(2)=X(1)U A=ABC.X(2)包含所有属性,故B→A可从F中去掉。(3)设B→C冗余,从F中去掉B→C,则F3={A→B,A→C,C→A}。计算(B)F3+:扫描F3中各个函数依赖,找不到左部为B或B子集的函数依赖,因为找不到这样的函数依赖,故有X(1)=X(0)=B,(B)F1+= B不包含C,故B→C不是冗余的函数依赖,不能从F1中去掉。(4)设A→C冗余,从F中去掉A→C,则F4={A→B,B→C,C→A}。计算(A)F4+:设X(0)=A,计算X(1):扫描F4中各个函数依赖,找到左部为A或A子集的函数依赖,A→B。故有X(1)=X(0)U B=AB;扫描F4中各个函数依赖,找到左部为AB或为AB子集的函数依赖,B→C,X(2)=X(1)U C=ABC.X(2)包含所有属性,故A→C可从F中去掉。(5)设C→A冗余,从F中去掉C→A,则F4={A→B,B→C}。计算(C)F5+:设X(0)=C,计算X(1):扫描F5中各个函数依赖,找到左部为C或C子集的函数依赖,找不到左部为C或C子集的函数依赖,因为找不到这样的函数依赖,故有X(1)=X(0)=C,(B)F1+= C不包含A,故C→A不是冗余的函数依赖,不能从F中去掉。(6)至此,所有依赖均以验算完毕,故F最小(极小)函数依赖集合为:{A→B,B→C,C→A}
以上问题属网友观点,不代表本站立场,仅供参考!