我遇到了将关系转换为BCNF关系的问题。首先,我必须将其转换为3NF。所以我在这里得到了。
运输(运输,运输,日期,货物,价值)PK:运输,日期。
FDs:Ship->容量,(发货,日期) - >货物,(容量,货物) - >价值。
这是我转换为3NF时所得到的。
R1(船舶,日期,货物)PK:发货,日期 R2(船舶,容量)PK:发货 R3(Calacity,Cargo,Value)PK:Calacity,Cargo
因此,第一和第二次满足BCNF
但R3并不是因为货物和运力不是航运的关键。所以我必须建立另一种关系R4,
R4(船舶,运力,货物)
那么有人可以验证我的结果吗?我这几天正在学习BCNF。
答案 0 :(得分:0)
分解为BCNF的标准算法具有任何关系。您无需先分解为3NF。 Google“BCNF算法”可以找到大学/大学的教科书或演示文稿。虽然https://dba.stackexchange.com/questions/139322/decompose-this-relation-into-bcnf似乎引用了一个。
PS关于“只有可用的FD”的理由是不健全的。你会得到一些可能是封面的FD。 (即只有他们跟随的FD持有。)这意味着其他FD只能涉及一些属性。所以在一个不使用FD必须持有的其他属性的组件中 - 即使它不在封面中。您需要学习如何计算“最小覆盖率”,然后在给出最小覆盖率的情况下如何计算“一组属性的闭包”。然后,当您删除属性并且保留的FD是剩余属性集合的闭包中时,您可以为它们设置封面。注意,上面链接中的算法涉及从FD集的闭包中重复地找到保持(有时对于原始关系,有时对于其组件)的FD。不只是你开始的一些封面。
PPS PK无关紧要。候选人密钥很重要。 PK只是你选择称之为PK的一些CK。