【问题标题】:How do I check if a decomposition is in BCNF?如何检查分解是否在 BCNF 中?
【发布时间】:2020-06-28 15:44:58
【问题描述】:

我有以下关系:R = (ABCDE) 与函数依赖 F = {A → B, B → CDE, E → AC}。我有两个分解是 R1 = (BCDE) 和 R2 = (AE)。如何检查这些分解是否在 BCNF 中?我知道如何检查它们是否无损和依赖保留(在这种情况下,我认为两个答案都是肯定的),而不是如何检查它们是否在 BCNF 中。

【问题讨论】:

  • 请不要要求我们重写您的教科书。引用其相关定义和算法并展示您的工作并提出 1 个问题。此外,这是一个很容易找到的常见问题解答。
  • 您的“我有这些 FD”没有意义。 “这些都是持有的FD”?--不可能。 “这些都是持有的不平凡的FD”?--不可能。 “这些是一些持有的FD”?--问题无法回答。找出什么是 cover 以及应用特定定义/规则/算法的确切条件。要确定 CK 和 NF,我们必须得到构成掩护的 FD。有时是最小/不可约覆盖。并且必须给出所有属性的集合。 See this answer.

标签: sql database database-design relational-database database-normalization


【解决方案1】:

假设FR的函数依赖的覆盖,则关系已经在BCNF中。

实际上,要检查一个关系是否为 BCNF,我们可以检查一个覆盖的所有依赖项是否具有超键的行列式。在您的情况下这是正确的(因为关系的候选键是 ABE),所以不需要分解它。

【讨论】:

  • 是的,这两个关系都在 BCNF 中(以及您原始问题中的两个)。
猜你喜欢
  • 2016-01-24
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
相关资源
最近更新 更多