判断是否保持函数依赖

文章介绍了判断关系R在分解为R1和R2后是否保持函数依赖F的方法,包括求Fi集合,计算左侧元素的闭包,构建G集合,并验证F中的依赖是否都在G中。通过示例解释了如何处理不在G中的依赖,即求闭包来确定是否保持函数依赖。

判断是否保持函数依赖

直接通俗易懂的做法,分成4步:

(1)求每个Fi{};

(2)求原F{}中左侧元素的闭包,将其补齐在Fi中

(3)求G,同时看F中的关系是否都在G中

(4)如果都在,则保持依赖。如果有不在的,就对它求闭包(在G中求闭包)。如果闭包包含它的左侧元素,那么就是保持函数依赖,否则就不保持。

例题:

例:R={A, B, C, D, E}, F={B->A, D->A, A->E, AC-B}.判断分解P={R1(ABCE), R2(CD)} 是否保持函数依赖?

这里分成了两个,R1和R2.所以第一步求F1{}和F2{}。

R1中包括ABCE四个元素,在F中找由这4个元素构成的依赖。得到F1={B->A, A->E, AC->B}。同理我们求F2,但F中没有CD组成的依赖,所以F2={空}。

F1={B->A, A->E, AC->B}。
F2={空}

第二步,求F中左侧元素的闭包,目的是为了找出所有传递函数依赖。

B+={BAE};可以得到B能推E,B->E。
D+={DA};得到D->A.
A+={AE};得到A->E.
AC+={ACBE};得到AC->A,AC->E。这里平凡函数依赖可以不用写,我这里为了展示过程完整性,就写上了。

然后补齐在F1,F2中。要记住,F1是由ABCE4个元素组成的;F2只由CD2个元素组成。

F1={B->A, A->E, AC->B,B->E,AC->A, AC->E}
F2={空};

(注:斜体加粗的是补进去的。)

第三步,求G。

G=F1 并 F2 并 F3…并Fn

这里G=F1 并 F2 得:

G={B->A,,A->E, AC->B,B->E,AC->A,AC->E}

然后看F中的依赖是否都在G中,发现D->A
不在。

第四步,求D的闭包。

此时范围应该是在G中来找。
得D+={D},没有包含它右侧的A。所以没有保持函数依赖。如果这里算出来D的闭包D={DA…}包含了D->A中的右侧元素,则它就是保持了函数依赖。

注:过程用语可能不是很规范,只是想通俗的把方法讲出来,如有错误,还请指正。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值