![](/img/trans.png)
[英]Lossless join decomposition property - only one lossless decomposition for a BCNF decomposition
[英]Lossless join decomposition more than two relations
给定一个关系,一组功能依赖项,并将其分解为多个关系(> 2),是否有某种方法可以检查这种分解是无损的还是有损的?
为了将R分解为两个关系R1和R2,我们检查R1和R2的交点是否形成R1或R2的主键。 如果是这样,则分解是无损的。
考虑下面的问题,给出关系R的FD集和分解。
现在,我认为这种分解是有损的……但是,这更像是一种直觉。 如果要求我证明这一点,我可能无法做到。 我的直觉是基于这样的事实,即关系对R2-R3,R1-R2和R1-R4之间没有共同的属性,这在该对关系中是首要的。 因此,跨R1,R2,R3和R4的自然联接操作将产生一些不在原始关系中的行。
但是我自己不确定这种分解是否有损。有人可以帮助我理解这一点吗?
谢谢!
在这里可以找到类似的问题,并且给出了很好的答案: 无损连接和功能依赖关系的分解 。 只需使用chase / tableau方法(:
当公用列是一个组件的超键,即包括一个组件的CK(候选键)时,二进制分解是无损的。 (不是“主要属性”,即是CK成员的属性。)因此,以下内容是无损的:
join FDs CKs
R1 R3 ABCDH A->B, A->C, D->H, AH->D AD, AH
R2 R4 CDEH E->C, D->EH D
R4 R3 ADEH D->EH, AH->D AD, AH
现在,我们可以基于任一关系的CK无损地加入ABCDH&ADEH,然后根据CK D无损地将结果与CDEH相结合。
因此,分解是无损的。
或者,我们可以尝试分解。 尝试R = R1 JOIN ADEH。 我们找到ADEH的FD和CK(恰好在上表中)。 我们继续观察是否可以继续无损分解以获得R2,R3和R4。
有关常规算法,请参阅Chase 。
根据我的说法,分解是无损的。 如果使用表格,R1交叉点R3和R2交叉点R4,它是无损的,并且还涉及所有分解的表格。 如果您想在R1和R3与R2和R4之间进行自然连接,您将获得表R。谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.