【发布时间】:2023-03-17 11:19:01
【问题描述】:
我不明白 Boyce-Codd 范式。我看了我的课本,但我不明白。假设关系 R = (A,B,C,D,E) 和 F={A->C, D->CB, AC->E}。你如何确定 R 是否在 BCNF 中?需要帮忙。谢谢!
【问题讨论】:
标签: database relational-database bcnf
我不明白 Boyce-Codd 范式。我看了我的课本,但我不明白。假设关系 R = (A,B,C,D,E) 和 F={A->C, D->CB, AC->E}。你如何确定 R 是否在 BCNF 中?需要帮忙。谢谢!
【问题讨论】:
标签: database relational-database bcnf
要确定一个关系是否为 BCNF,我们检查它的功能依赖关系。
在 BCNF 中,如果对于每个 FD X→Y,我们要么有
FD 是 A→C、D→CB、AC→E。让我们从第一个 FD A→C 开始。
A→C 不是平凡的,因为 C ∉ A。例如,A→A 是平凡的依赖。
现在 A→C 是超级键吗?为了检查我们是否计算了 FD 左侧的闭包,在本例中为 A。闭包是 A 逻辑暗示的所有元素。 [A]+ = A ∪ C ∪ E = ACE 左右我们有 A→ACE。
ACE 不是超级键,因为它包含关系的所有属性。
所以关系不在 BCNF 中,因为 A→C 既不是平凡的也不是超级键。
还有其他违反 BCNF 的行为。 [D]+ = BCD,它不是超级密钥或微不足道的。 [AC]+ = ACE,它不是超级密钥或普通密钥。
希望这会有所帮助!我认为一切都是正确的,但我现在正在为期末考试而学习,并尝试学习很多这些材料。
【讨论】:
非正式地,您首先确定所有候选键。然后你看看函数依赖中的箭头。
如果每个箭头都是候选键的out箭头,则它在 BCNF 中。
【讨论】: