BCNF分解查询

时间:2014-06-06 03:20:29

标签: sql database database-normalization decomposition bcnf

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

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

enter image description here

  

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

现在我的问题是,我了解如果将关系 R 拆分为 R1(A,D)<,则无法保留 ABC-&gt; D / strong>和 R2(BCD),但如果您将 R2(BCD)更改为 R2(ABCD),该怎么办?那会不会保留它?我们有什么理由不这样做吗?

1 个答案:

答案 0 :(得分:3)

您正在以两种方式脱离上下文“所以没有BCNF分解”。没有(无损)BCNF分解(1)进入所有较小的关系(每comment)(2)保留所有FD (per {{ 3}})。

来自comment

  在保留FD的同时,[O] ne总能无损地分解为3NF   BCNF可能无法保留它们。然而,它是无损的   分解:组件,如果保持原始的投影,   将加入原版。但无论何时原件都会有   给定值,组件应该是它的预测。 (如果他们是   不,错误已经发生,所以我们希望DBMS限制   适当的组件。)所以有必要但足够   约束组件是原始的投影。 ABC是   平凡如此(因为它是关键)。这让我们需要要求   AD = ABCD PROJECT {DA}。我们说组件必须满足   “平等依赖”。

您可以随时将非损失分解为5NF。如果要根据未预留的FD约束组件,则可能必须添加相等依赖性约束。