这个BCNF转换是否正确?

时间:2016-11-17 11:19:11

标签: relational-database database-normalization

我遇到了将关系转换为BCNF关系的问题。首先,我必须将其转换为3NF。所以我在这里得到了。

运输(运输,运输,日期,货物,价值)PK:运输,日期。

FDs:Ship->容量,(发货,日期) - >货物,(容量,货物) - >价值。

这是我转换为3NF时所得到的。

R1(船舶,日期,货物)PK:发货,日期 R2(船舶,容量)PK:发货 R3(Calacity,Cargo,Value)PK:Calacity,Cargo

因此,第一和第二次满足BCNF

  1. 发货,日期是R1的主键,只有R1的FD可用, 发货,日期 - >货物和
  2. Ship是R2的主键,只有R2的可用FD是Ship->容量。
  3. 但R3并不是因为货物和运力不是航运的关键​​。所以我必须建立另一种关系R4,

    R4(船舶,运力,货物)

    那么有人可以验证我的结果吗?我这几天正在学习BCNF。

1 个答案:

答案 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。