我有一个关系 R(A,B,C,D)与功能依赖 ABC - > D 和 D - > A
问题是,这是否有BCNF,答案如下:
(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),该怎么办?那会不会保留它?我们有什么理由不这样做吗?
答案 0 :(得分:3)
您正在以两种方式脱离上下文“所以没有BCNF分解”。没有(无损)BCNF分解(1)进入所有较小的关系(每comment)(2)保留所有FD (per {{ 3}})。
来自comment:
在保留FD的同时,[O] ne总能无损地分解为3NF BCNF可能无法保留它们。然而,它是无损的 分解:组件,如果保持原始的投影, 将加入原版。但无论何时原件都会有 给定值,组件应该是它的预测。 (如果他们是 不,错误已经发生,所以我们希望DBMS限制 适当的组件。)所以有必要但足够 约束组件是原始的投影。 ABC是 平凡如此(因为它是关键)。这让我们需要要求 AD = ABCD PROJECT {DA}。我们说组件必须满足 “平等依赖”。
您可以随时将非损失分解为5NF。如果要根据未预留的FD约束组件,则可能必须添加相等依赖性约束。