【问题标题】:BCNF normalizationBCNF 归一化
【发布时间】:2017-05-16 12:57:21
【问题描述】:

您能否给我提供一篇文章,给出一个在 3NF 中但不在 BCNF 中的 DB 设计示例,然后说明如何将其转换为 BCNF?我看到的所有试图解释 BCNF 的文章都给出了 1NF 中的表的示例,然后将它们转换为 BCNF。这并没有让我看到 3NF 和 BCNF 之间的区别。

提前致谢

【问题讨论】:

  • 数十种已出版的学术信息建模和数据库设计教科书以 pdf 格式在线免费提供。
  • 谷歌搜索“在 3NF 中但不在 BCNF 站点中的数据库:stackoverflow.com”给出Finding a relation in 3NF but not in BCNF。标准化为 BCNF 是一个常见问题。在考虑发布之前,请阅读教科书/参考/手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。

标签: database database-design database-normalization


【解决方案1】:

重叠键的例子揭示了差异;具有谓词[P] 和匹配约束(c x.y)

[P] 员工EMP,电子邮件EMAIL,在YR 年参加了CRS 课程。

(c 1.1) 对于每个员工和课程;该员工最多上过一次该课程;可能不止一名员工参加了该课程。

(c 1.2) 对于每个员工和每个课程;那位员工在整整一年的时间里完成了这门课程。

(c 1.3) 对于每个员工和年份;该员工可能在那一年参加了不止一门课程。

(c 1.4) 对于每个课程和年份;那一年有可能不止一名员工参加了该课程。

(c 2.1) 对于每位员工,该员工只有一封电子邮件。

(c 2.2) 对于每封电子邮件,只有一名员工拥有该电子邮件。

(c 3.1) 对于每封电子邮件和课程;拥有该电子邮件的员工最多上过一次该课程;有可能不止一名员工收到了该电子邮件。

(c 3.2) 对于每封电子邮件和每门课程;收到那封电子邮件的员工正好在一年内完成了该课程。

(c 3.3) 对于每个电子邮件和年份;收到该电子邮件的员工可能在那一年参加了不止一门课程。

(c 3.4) 对于每个课程和年份;那一年有可能不止一名员工拥有特定的电子邮件地址。

注意语言化约束如何直观地揭示问题。看看约束 c 3.x 如何匹配(重复)c1.x 由于 c 2.x


R {EMP, EMAIL, CRS, YR}

KEY {EMP,   CRS}
KEY {EMAIL, CRS}

为此的FD是

FD {EMP,  CRS} --> {YR}

FD {EMAIL, CRS} --> {YR}

FD {EMP} --> {EMAIL}

FD {EMAIL} --> {EMP}

因此,将这些中的每一个视为FD X --> Y,它认为任一

  • X 是一个超级键,
  • Y 是一个子项。

因此R 在第三个 NF 中。

对于 BCNF,要求是对于 R 中的任何重要的 FD X --> Y,X 是超级键。

这是 2NF 到 BCNF 的检查表

---------------------------------------
For each nontrivial |        NF
    FD X --> Y      |
at least one holds  | 2nd   3rd   BCNF
---------------------------------------
X is a superkey        ✔     ✔     ✔

Y is a subkey          ✔     ✔

X is not a subkey      ✔
---------------------------------------

FD X --> Y is trivial iff Y ⊆ X

现在我们可以将R 分解为:

{EMP, EMAIL} {EMP, CRS, YR}

OR

{EMP, EMAIL} {EMAIL,  CRS, YR}

这消除了这两个 FD 到子键。


最后,请注意,在分解为{EMP, EMAIL} {EMP, CRS, YR}{EMP, EMAIL} {EMAIL, CRS, YR} 之后,这些表现在全部5NF 中——实际上在6NF 中,但这现在并不重要。重要的是要观察到有可能进入5NF——因此进入:(4, BCNF, ..., 1)——只需使用逻辑、语言化谓词和约束。换句话说,对于开发人员:

即使您不知道所有这些术语的含义,您的表格也可能很高 NF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2023-03-30
    • 2015-04-08
    • 1970-01-01
    • 2015-11-23
    相关资源
    最近更新 更多