什么是规范封面,封闭和无关属性?

时间:2012-06-01 07:14:14

标签: database-design relational-database database-schema functional-dependencies canonical-form

我正在研究数据库概念,有3个概念我不明白。典型的封面,无关的功能依赖和封闭。我阅读了关于规范封面的定义,但我不了解它与3NF和BCNF的关系。规范覆盖的定义似乎是没有无关的属性,无关的属性意味着不改变函数依赖集的闭包的属性,而闭包是F所隐含的所有函数依赖的集合,一组函数依赖

但这一切都有点模糊,我既喜欢直观的定义,也喜欢如何计算

  • Canonical cover
  • 封闭
  • 无关属性

功能依赖我相信我理解它是什么,就像我们在表中拥有这些属性一样,它就像表中的PK一样。

database refinement - minimal cover of F (extraneous attributes)有一个相当广泛的答案,但我发现很难阅读所有的定义和代数,我宁愿用简单的英语定义。

例如,模式U = {A,B,C,D,E,F,G}和函数依赖

AB→C

B→E

CF→D

C→A

B→F

CE→F

CD→B

B→C

闭包A +,B +,C +,D +,E +,F +是这样计算的吗?

A + = A

B + = BCDEF

C + = A

D + = D

E + = E

F + = F

? 如果我没有弄错,那么BCDEFG是1NF / 2NF中的超级密钥(“全密钥”),但它是否最小(3NF)?

在闭包和规范封面的帮助下,还应该做些什么来将这个例子规范化为1NF,2NF和3NF?规范封面与最小封面相同吗?

我lösningen直到detta talsåharBCDEFG angetts som“prima attribut”och som“ickeprima”attribut men resonemanget saknas。

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

  

闭包A +,B +,C +,D +,E +,F +是这样计算的吗?

“G”发生了什么?它的缺席很重要。你知道为什么吗?

  

如果我没弄错,那么BCDEFG就是一把超级钥匙(“全键”)   1NF / 2NF,但它是最小的(3NF)?

超级密钥(一个字,没有空格)并不意味着整个密钥;它只是意味着一把钥匙。所有属性的集合都是一个简单的超级密钥,因此{ABCDEFG}是一个简单的超级密钥。

由于B-> C和C-> A(传递依赖),您可以将普通超级密钥减少到{BCDEFG}。可能还有几个减少,因此{BCDEFG}不是最小的超级密钥。 {BCDEFG}是一个可简化的超级密钥。

最小超级密钥的一个是{BG}。 (我可以说,“{BG}是一个不可简化的超级钥匙。”)还有其他最小的超级钥匙。

  

还应该做​​些什么来将此示例规范化为1NF,2NF和3NF   在封闭和规范封面的帮助下?

如果您对此有一个共同的误解,通常不可能标准化为2NF 且没有更高的,或标准化为3NF 且没有更高的。消除部分密钥依赖性(“规范化为2NF”)可以使您的所有关系保持在5NF。

下一步是确定所有候选键(所有不可约的超级键)。

答案 1 :(得分:1)

我的答案来自Korth的数据库系统概念中给出的算法。

闭包A +,B +,C +,D +,E +,F +是这样计算的吗? 计算F下(A,B,C,D,E,F)闭包的步骤,假设为B

  1. result = {B}
  2. 重复
  3. 表示B -> E
  4. 中的每个功能依赖关系(例如F
  5. 开始
  6. 如果B是结果的子集
  7. 然后result(i.e B) = result(i.e B) U {E}
  8. 直到(结果停止变化)
  9. 通过这种方式,以下的闭包将是: A + = A

    B + = ABCDEF

    C + = AC

    D + = D

    E + = E

    F + = F

    如何检查属性是无关紧要的: 属性 A 在依赖关系alpha(AB)中是无关的 - > beta(C)if

    1) A 属于beta(目前不属于此情况),然后创建新的FD                  F' = (F-{alpha -> beta}) U {alpha -> (beta - alpha)} 并检查alpha+ under F'(**not F**) includes A是否A,然后betagamma{B} = alpha({AB}) - {A}无关。

    2) A 属于alpha(这是正确的),然后创建一个新的gamma+(i.e B+)并检查**F** i.e ABCDEF下的beta({C})是否包含AB->C中的所有属性{1}}这是真的。因此 A C中无关紧要。

    同样检查AB->CF' : AB -> NULL; B →E; CF →D; C →A; B →F; CE →F; CD →B; B →C是否无关紧要。所以通过以上建议算法

    1. AB+
    2. F'下计算ABCDEFC包括C。因此AB-> CF' = F无关紧要。
    3. 如何计算规范封面?

      ALGO:

      1. A->B and A->C
      2. 如果有A->BC之类的FD,则替换为AB -> C; B-> CEF; C -> A; CD-> B; CE-> F; CF-> D(按工会规则) 这里F'成为:A is extraneous in AB->C
      3. 在F中找到无关(左/右),A from AB->C,然后移除B->C,使其变为F'并更新F' : B -> C; B-> CEF; C -> A; CD-> B; CE-> F; CF-> D
      4. 现在检查F'是否像以前一样改变了。如果改变转到步骤2并重复直到找到F'不再改变。
      5. (解释进一步的迭代如下: itr2: F' : B-> CEF; C -> A; CD-> B; CE-> F; CF-> D C in B-> CEF 现在检查F' : B-> CE; C -> A; CD-> B; CE-> F; CF-> D,这不是无关紧要的 检查E,这也不是无关紧要的。 检查F,这是无关紧要的。 新F' : B-> CE; C -> A; CD-> B; CE-> F; CF-> D

        itr3: B-> CE 在此之后,没有找到进一步的无关属性。

        所以F的规范封面是:

        C -> A

        CD-> B

        CE-> F

        CF-> D

        6q1, 6q2, 6q3, 6q4, 7q1, 7q2, 7q3, 7q4 8q1, 8q2, 8q3, 8q4;

        如果上面提到的逻辑有误,请告诉我。

答案 2 :(得分:0)

是Canonical cover与最小封面相同。 并且所有的闭包都是正确的

在3NF中制作示例..

  1. 找到规范的封面
  2. 建立每个人的关系。即..如果Fc = {AB-> C,C-> D}则得到R1(ABC)& R2(CD)。
  3. 现在检查候选键是否包含在任何一个关系中。如果是,那么它在3NF 如果没有则再添加一个仅包含该候选键的关系。 并完成.. !!