0

我有一个关系R(A, B, C, D)与功能依赖ABC --> DD --> A

问题是,这是否有 BCNF,答案如下:

在此处输入图像描述

(c) ABCD不在 BCNF 中,因为D --> AD不是键。但是,如果我们将R拆分为ADBCD,我们将无法保留依赖关系ABC --> D。所以没有BCNF分解。

现在我的问题是,我知道如果将关系R拆分为R1(A,D)R2(BCD) ,则无法保留ABC->D ,但是如果将R2(BCD)更改为R2(ABCD)会怎样。那不就保存下来了吗?我们有什么理由不能这样做?

4

1 回答 1

3

您以两种方式将“因此没有 BCNF 分解”断章取意。没有(无损)BCNF 分解(1)到所有更小的关系(每条评论)(2)保留所有 FD(每条评论)。

这个答案

[O]ne 总是可以无损地分解为 3NF,同时保留 FD,但 BCNF 可能不会保留它们。尽管如此,这是一个无损分解:组件,如果持有原件的投影,将加入原件。但是,只要原始值具有给定值,组件就应该是它的投影。(如果不是,则发生错误,因此我们希望 DBMS 适当地约束组件。)因此,将组件约束为原始投影是必要但足够的。ABC 是微不足道的(因为它是一把钥匙)。这让我们需要要求 AD = ABCD PROJECT {DA}。我们说组件必须满足“平等依赖”。

您始终可以无损分解为 5NF。如果您想根据未保留的 FD 约束组件,您可能只需要添加等式依赖约束。

于 2014-06-07T18:14:58.247 回答