在BCNF中,我遇到了一个将关系运输转化为关系的问题。所以,首先,我必须把它转换成3NF。所以我得到的是。
装运(船舶、容量、日期、货物、价值) PK:船舶,日期。
船舶->容量,(船舶,日期)->货物,(容量,货物) ->Value.
这是我转化为3NF时得到的。
R1(船舶,日期,货物) PK:船舶,日期R2(船舶,容量) PK: R3(船舶,货物,价值) PK: Value,Cargo
所以第一和第二满足BCNF
但R3并不是因为货物和运力不是航运的关键。所以我必须建立另一个关系,R4,
R4 (船舶、容量、货物)
所以请有人核实一下我的结果好吗?这几天我在学习BCNF。
发布于 2016-11-17 12:29:53
将BCNF分解成BCNF的标准算法采用任意关系。你没有必要先分解成3NF。搜索“BCNF算法”,查找学院/大学的教科书或演示文稿。尽管https://dba.stackexchange.com/questions/139322/decompose-this-relation-into-bcnf似乎引用了一个。
你关于“只有可用的FDs”的推理是不正确的。您会得到一些FDs,这大概是一个幌子。(只有紧随其后的FDs持有。)这意味着其他FDs只能保留一些属性。因此,在一个不使用FD必须包含的其他属性的组件中--即使它不在封面上。您需要学习如何计算“最小覆盖”,以及如何计算给定最小覆盖的“一组属性的闭包”。然后,当您删除属性,而持有的FDs是其余属性集的闭包时,您将为它们提供一个掩护。请注意,上面链接中的算法涉及从FDs集的闭包中反复找到一个FD,该FD保持(有时用于原始关系,有时用于它的某个组件)。而不仅仅是你一开始的掩护。
PPS PKs是不相关的。候选钥匙很重要。一个PK只是一些CK,你选择叫PK。
https://stackoverflow.com/questions/40653555
复制相似问题