【问题标题】:Lossless Decomposition无损分解
【发布时间】:2012-11-02 22:02:39
【问题描述】:

考虑一个模式 R(A, B, C, D) 和函数依赖 A ⟶ B 和 C ⟶ D。那么为什么不将 R 分解为 R1(A, B) 和 R2(C, D)无损分解?你能用现实生活中的例子解释一下这里丢失了什么信息吗?

【问题讨论】:

  • 看起来像 GATE 考试题

标签: sql database


【解决方案1】:

您当然需要在无损分解中概述的两个关系 R1(A,B) 和 R2(C,D),但是您丢失了关于哪些 A 值与哪些 C 值相关联的关键信息存在于原始 R(A, B, C, D) 中。所以你还需要 R3(A, C) 来保留所有的原始信息。

关系R

A    B    C    D
1    2    13   14
2    2    13   14
3    1    12   15

关系 R1

A    B
1    2
2    2
3    1

关系 R2

C    D
13   14
12   15

连接 R1 和 R2(笛卡尔积);标记为 ☜

的虚假行
A    B    C    D
1    2    13   14
1    2    12   15   ☜
2    2    13   14
2    2    12   15   ☜
1    3    13   14   ☜
3    1    12   15

由于此连接与 R 不同,因此建议的分解不是无损的。

关系 R3

A   C
1   13
2   13
3   12

加入 R1、R2、R3

A    B    C    D
1    2    13   14
2    2    13   14
3    1    12   15

由于这个结果关系和原来的R一样,分解成R1、R2、R3是无损的。

【讨论】:

    【解决方案2】:

    那为什么R分解成R1(A,B)和R2(C,D)不是无损分解呢?

    因为现在 (A,B) 和 (C,D) 是不相关的,而事实并非如此。您还需要 A 和 C 之间的关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 2015-06-27
      • 1970-01-01
      • 2017-12-07
      • 2017-07-08
      • 2023-03-19
      相关资源
      最近更新 更多