代码之家  ›  专栏  ›  技术社区  ›  DsCpp

子架构中不显示使用功能依赖项保留依赖项的分解

  •  -1
  • DsCpp  · 技术社区  · 7 年前

    我在读一本教科书,里面有以下问题:

    Given the following relation R {A,B,C,D,E,H} and the functional 
    dependencies AB->CD, BC->D, C->H, D->HB, CH->AE
    does the following decomposition is dependency preserving?
    R1(A,C,E,H) R2(B,D,H), R3(A,B,C), R4(B,C,D)
    

    教科书的答案是,它实际上是功能依赖保持,我认为这不是因为依赖 AB->D
    Reading this answer 使它更加混乱,因为它使它看起来像
    if there is a key inside one of the sub relations, the decomposition must be dependency preserving
    我不能反驳的一个反例是
    For the two rows a1 b1 c1 d1 h1 e2 and a2 b1 c2 d2 h2 e2
    R的所有F.D保持不变,但现在r3已经
    a1 b1 c1 and a2 b1 c2
    和R4有 b1 c1 d1 and b1 c2 d2 ,
    将r3和r4连接到b上给出 a1 b1 c2 d2 它打破了 AB & GT FD

    1 回复  |  直到 7 年前
        1
  •  1
  •   Renzo    7 年前

    在这个示例中,依赖项被保留,如注释中的antc所示。

    原始关系的候选键存在于已分解关系中的条件不能保证保留依赖项。

    例如考虑关系 R(A B C D E) 有依赖关系 {A → E, BCE → A, D → C} 和分解 R1(A B D) , R2(A E) , R3(C D) . 关系R1包含原始关系的一个候选键( {ABD} ,但在分解过程中 {BCE → A} 未保存。

    原来的一个键存在于一个分解的关系中。 能够 表示分解是无损的,但一般来说,无损分解和依赖关系保留之间没有关系(例如参见 this )然而,有一个结果在某种程度上连接了这两个属性,如所引用问题的答案所示。