【问题标题】:Database BCNF Violations数据库 BCNF 违规
【发布时间】:2014-10-23 01:21:27
【问题描述】:

我对 DB BCNF 违规标准的某个特定方面感到困惑。这是一个例子:

R(ABCDEF)

FD 是BC->D, C->AF, AB->CE

我已将候选键派生为AB and BC

如果所有的 FD 都包含至少部分候选键,那么关系在 BCNF 中正确吗?

谢谢大家!

【问题讨论】:

  • “我已经将候选键导出为AB->CE or BC->D。” 这些是功能依赖项,而不是候选键。可能有多个候选键。你不能从中选择;您可以识别出所有个。
  • " . . . . . . . . . . . 关系仍然在 BCNF 中,因为所有的 FD 都至少包含候选键的 LHS 的一部分?" 不,它在 BCNF如果每个 FD 中的箭头是候选键中的箭头。在这种情况下,R 不在 BCNF 中,因为 C->AF 中的箭头不是候选键中的箭头。 (C 不是 R 中的候选键。)
  • 嗨。感谢您的指正。我已经编辑了这个问题,但 CK 仍然是 AB 和 BC。那么,为了让 R 在 BCNF 中,所有 FD 的 LHS 必须至少包含一个 FULL 候选键(在这种情况下,AB 或 BC)?
  • 还有一件事,如果我想找出 R 中的违规行为,我应该选择一个 CK 并将所有 FD 与该 CK 进行比较,还是在比较 FD 时使用所有 CK ?非常感谢!

标签: relational-database bcnf


【解决方案1】:

您派生了正确的键:AB 和 BC。

关系在 BCNF 正确,因为所有的 FD 至少包含 候选键的一部分?

没有。非正式地,当且仅当每个 FD 中的箭头是候选键外的箭头时,关系才属于 BCNF。换句话说,当且仅当每个函数依赖的左侧都是候选键时,关系才属于 BCNF。 C->AF 的左边是 C,但 C 不是候选键。所以 R 不在 BCNF 中。

(来自 OP 的评论......)

还有一件事,如果我想找出 R 中的违规行为,应该 我选择一个 CK 并将所有 FD 与该 CK 进行比较,或者我应该 比较 FD 时使用所有 CK?

使用所有候选键。规范化总是考虑所有候选键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多