2016-11-17 80 views
1

我遇到了将关系转换成BCNF关系的问题。所以首先我必须把它转换成3NF。所以在这里我得到了什么。BCNF转换是否正确?

运输(船舶,容量,日期,货物,价值)PK:运输,日期。

FDs:Ship-> Capacity,(Ship,Date) - > Cargo,(Capacity,Cargo) - > Value。

这里我得到什么时转换为3NF。

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

所以第一和第二满足BCNF因为

  1. 船舶,日期为R1的主键和仅R1的可用FD是, 船舶,日期 - >货物和
  2. 船舶是R2的主键和只有R2的可用FD被船 - >能力。

但是R3并不是因为货物和容量不是运输的关键。所以我要再拍关系R4使得

R4(船舶,容量,货物)

所以请有人可以验证我的结果?这些天我正在学习BCNF。

+0

你能解释一下这个算法吗?我无法理解,当建立新的关系时。作为这种关系的例子是BCNF中的Ship-> Capacity FD? – User9125

+0

航运关系的PK是船期和日期。 – User9125

+0

有一个标准算法可以分解为BCNF。确定* BCNF中的关系是*是不同的算法/测试。 (它是前面算法的一部分。)(找到一个BCNF的定义。)尽可能地发布一个问题,描述你需要的地方,给出你正在使用的引用,并且询问你需要去掉什么。 – philipxy

回答

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,该FD从FD集合的闭包中(有时用于原始关系,有时用于它的一个组成部分)。不只是你开始的一些封面。

PPS PK是无关紧要的。候选键很重要。 PK只是你选择打电话给PK的一些CK。