【问题标题】:Is the following decomposition lossless and dependency preserving?下面的分解是无损的并保持依赖关系吗?
【发布时间】:2021-01-09 02:06:04
【问题描述】:

在 R(A,B,C,D) 中, 让依赖成为

A->B 
B->C 
C->D 
D-> B

R 分解为 (A,B), (B,C) 和 (B,D) 是无损的还是依赖保留的?

我的尝试:(A,B) 和 (B,C) 可以无损地组合,因为 B->C。但是,对于 (A,B,C) 和 (B,D),B 不构成任何一个的密钥。因此有损分解。

同样对于依赖保留,关系(C-D)不能从任何分解的关系中得到,因此分解不是依赖保留。

但是给出的答案是分解既无损又保留依赖性。那我哪里错了?

关系 R 的键也只有 {A} 不是吗?

【问题讨论】:

  • 您的“我有这些 FD”没有意义。 “这些都是持有的FD”?--不可能。 “这些都是持有的不平凡的FD”?--不可能。 “这些是一些持有的FD”?--问题无法回答。找出什么是 cover 以及应用特定定义/规则/算法的确切条件。要确定 CK 和 NF,我们必须得到构成掩护的 FD。有时是最小/不可约覆盖。并且必须给出所有属性的集合。 See this answer. 例如“B 不构成任何一个键”--false。
  • 请提出 1 个问题。给出明确的推理——有任何机会解决、交流和证明你付出了合理的研究努力。通过明确合理的小步骤将声明与您给出的定义和定理联系起来。例如“因为 B->C”和“B 不构成任何一个键”——为什么? “无法得到关系(C-D)”——不清楚。无论您是什么意思,这如何适用于确定无损性? PS 如果给定的 FD 形成一个掩护,那么 {A} 是唯一的 CK。但是,如果您不确定,那么将其作为单独帖子的第一个问题提出,并推理到被卡住/不确定。

标签: database database-normalization functional-dependencies


【解决方案1】:
  1. 你说:

但是,对于 (A,B,C) 和 (B,D),B 不构成任何一个的密钥。因此有损分解。

这是错误的,因为B(B, D) 的键。我们可以通过从原始依赖关系中计算B+ 来看到这一点,假设它们形成了关系的覆盖。

B+ = B
B+ = BC (for the dependency B->C)
B+ = BCD (for the dependency C->D)

所以,由于D 包含在B+ 中,我们有B->D 可以从原始依赖集派生,并且在分解中(B, D) B 是一个键(因为它是@ 987654330@)。

  1. 为了保持依赖关系,我们必须检查分解的所有投影依赖关系的联合是原始依赖集的覆盖。由于分解关系的三个覆盖分别是{A->B}{C->B, B->C}{D->B, B->D},通过合并这三个集合,您可以轻松地导出D->CC->D,因此保留了依赖关系。

  2. 最后,是的,{A} 是原始关系的唯一候选键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-01
    • 2016-10-11
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多