繁体   English   中英

无损连接分解不止两个关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM