数据库函数依赖问题 50

设有关系模式R(A,B,C,D),其函数依赖集为F={A->D,B->D,C->D}。如果将R分解为R1(A,B,C)和R2(C,D)。这个分解保持函数依赖吗?为什么?我... 设有关系模式R(A,B,C,D),其函数依赖集为F={A->D,B->D,C->D}。如果将R分解为R1(A,B,C)和R2(C,D)。这个分解保持函数依赖吗?为什么?
我自己觉得是保持 a->d和b->c都可以从r1的a->c和b->c再加上r2的c->d推出,传递依赖
然后答案是不保持,我错到哪了?
展开
 我来答
杨森泉ysq
2018-04-25 · TA获得超过808个赞
知道小有建树答主
回答量:256
采纳率:100%
帮助的人:49.4万
展开全部

你好!

首先我们可以看到,C→D在R2上保持函数依赖,但是A→D,B→D在R1,R2上都不保持,所以做进一步判断——

判断的算法如下:

对F上的每一个α→β使用下面的过程:
①令result=α;
②t=(result∩Ri)+ ∩Ri;
result=result∪t

(第二步的Ri={R1(...),R2(...),...,Rn(...)},该步骤遍历一遍分解出的关系模式)

要注意的是这里的属性闭包是在函数依赖集F下计算出来的,如果result中包含了β的所有属性,则函数依赖α→β,分解是保持依赖的(当且仅当上述过程中F的所有依赖都被保持)。

那么我们来判断一下,首先是A→D

先对R1,令result=A,result∩R1=A,A+=AD,t=A+∩R1=A,result=A;

再对R2,令result=A,result∩R2=空集,空集无法求闭包,那么t=空集,result=A。

可以发现无论对于R1还是R2最后的result都是A,并未包含D,所以A→D未被保持,这里已经可以得出该分解不保持函数依赖

对于B→D也是一样的方法:

先对R1,令result=B,result∩R1=B,B+=BD,t=B+∩R1=B,result=B;

再对R2,令result=B,result∩R2=空集,空集无闭包,t=空集,result=B;

result并未包含D,所以B→D也同样未被保持,该分解不保持函数依赖

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式