【问题标题】:Reflexivity in functional dependencies函数依赖的反身性
【发布时间】:2018-03-11 01:57:11
【问题描述】:

我正在上一门关于数据库的课程,我正在做关于功能依赖关系的作业。作为获取给定依赖项并使用 Armstrong 公理推导其他重要依赖项的示例,TA 写了这个,我无法理解它。

考虑关系 R(c,p,h,s,e,n) 和 F 函数依赖集{1. c->p, 2. hs->c, 3. hp->s, 4. ce->n, 5. he->s}

迭代 1:

从 F,我们可以构建 F1

6. hs->p (transitivity: 1+2)
7. hc->s (pseudo-transitive. 1+3)
8. hp->c
  1. hp->hs (reflexivity 3)
  2. hp->c (transitivity: 8.1+2)
9. he->c
  1. he->hs (reflexivity: 4)
  2. he->c (transitivity: 9.1+2)

除了使用“反身性”的情况(使用引号,因为这与我的教科书中的反身性定义相去甚远)之外,我大部分都理解得很好。谁能告诉我这是怎么反身的?另外,我怎么知道迭代何时结束?难道你找不到无数种重写函数依赖的方法吗?

【问题讨论】:

    标签: database database-normalization functional-dependencies


    【解决方案1】:

    这些是经典的阿姆斯特朗公理(例如参见 wikipedia):

    Reflexivity: If Y ⊆ X then X → Y
    Augmentation: If X → Y then XZ → YZ for any Z
    Transitivity: If X → Y and Y → Z, then X → Z
    

    因此,在您的示例中,要导出 hp → c,您可以按以下方式进行:

    1. hp → s (given)
    2. hp → hs (by augmentation of 1 adding h)
    3. hs → c (given)
    4. hp → c (by transitivity of 2 + 3)
    

    请注意,要从hp → s 产生hp → hs,要使用的公理是增广,其中Z 的角色由h 承担,而不是自反性,这也是用于推导的公理he → c(通过反身性你只能推导出,例如,hp → hphp → php → h)。

    你也在问:

    我如何知道迭代何时结束?难道你找不到无数种重写函数依赖的方法吗?

    阿姆斯壮公理只能有限次地应用于一组函数依赖,以产生新的函数依赖。这很容易显示,因为属性的数量是有限的,并且给定 n 个属性,您最多可以拥有 2n * 2n 不同的函数依赖(因为您可以在左右部分拥有任何属性子集,当然包括琐碎的依赖)。

    【讨论】:

      【解决方案2】:

      名字不会告诉你任何东西,除非有人决定叫什么。

      Trivial FD X -> X 与 X 中的属性有任何关系。即关系中的一组属性在功能上决定了它自己。这被合理地称为反身。碰巧它在功能上确定了它自身的每个子集。碰巧“自反性”被选为更普遍的规则的名称,而更普遍的规则被选为一组充分但非冗余的规则之一。

      阿姆斯特朗的公理已被证明是正确和完整的。声音意味着它们只生成隐含的 FD。完整意味着如果您继续应用一个公理,直到通过应用其中任何一个都没有得到任何新的 FD,那么您将获得所有可以从原始集合派生的 FD,即当原始集合成立时也必须成立。任何教科书都告诉你,你可以通过这样做来生成一组 FD 的传递闭包。

      还有用于 FD + MVD 的完整公理集。但是FDs + JDs没有。

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 1970-01-01
        • 2019-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-16
        • 2021-03-07
        • 2012-02-20
        相关资源
        最近更新 更多