2

关于 SO 有很多相关的问题,但我找不到可以回答这个问题的问题:

是否有可能拥有可以无损连接分解为 BCNF 关系同时保留依赖关系的 3NF 关系?

我知道,如果您准备放松一个或多个依赖项,您可以将 3NF 关系分解为 BCNF。并且Beeri 和Bernstein 证明了{AB->C, C->B} 形式的FD 给出了一个不能简化为BCNF 的3NF 关系。但是有没有一种情况是你处于 3NF 并且你可以减少到 BCNF?

对于额外的非官方书呆子点,我很想知道 3NF 允许但不支持 BCNF 的依赖关系的好术语?根据部分依赖和传递依赖来区分 1NF、2NF 和 3NF 非常容易,但在我看来,BCNF 的一半问题在于禁止的依赖类型没有简单的名称。

4

1 回答 1

1

但是有没有一种情况是你处于 3NF 并且你可以减少到 BCNF?

是的。维基百科有一个例子

法庭开始时间结束时间费率类型
--
1 09:30 10:30 节省
1 11:00 12:00 节省
1 14:00 15:30 标准
2 10:00 11:30 高级-B
2 11:30 13:30 高级-B
2 15:00 16:30 高级-A

该示例的功能依赖项未列出,但您可以派生它们。我在下面列出了 FD。

AB->CD
交流->BD
BD->AC
CD->AB
ABC->D
BCD->A
ABD->C
ACD->B
D->A

对于额外的非官方书呆子点,我很想知道 3NF 允许但不支持 BCNF 的依赖关系的好术语?. . . BCNF 的一半问题是禁止的依赖类型没有简单的名称。

在 BCNF 中,每个行列式(左侧)都必须是候选键。或者你可以说每个箭头都是候选键中的一个箭头。反过来,BCNF 禁止不是候选键的行列式。

维基百科文章中的候选键是 {AB, AC, BD, CD}。由于函数依赖 D->A,起始关系不在 BCNF 中。FD的行列式D 不是候选键。

于 2015-03-01T14:33:23.457 回答