首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是BCNF转换正确吗?

这是BCNF转换正确吗?
EN

Stack Overflow用户
提问于 2016-11-17 11:19:10
回答 1查看 95关注 0票数 1

在BCNF中,我遇到了一个将关系运输转化为关系的问题。所以,首先,我必须把它转换成3NF。所以我得到的是。

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

船舶->容量,(船舶,日期)->货物,(容量,货物) ->Value.

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

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

所以第一和第二满足BCNF

  1. 船舶,日期是R1的主键,只有R1的FD,船舶,日期,->货物和
  2. 船舶是R2的主要关键,只有R2的可用FD才是船舶->容量。

但R3并不是因为货物和运力不是航运的关键。所以我必须建立另一个关系,R4,

R4 (船舶、容量、货物)

所以请有人核实一下我的结果好吗?这几天我在学习BCNF。

EN

回答 1

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40653555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档