BCNF分解过程

时间:2015-11-24 09:00:50

标签: database relational bcnf

这些依赖项的BCNF分解是什么?

A->BCD
BC->DE
B->D
D->A

获得答案的过程是什么?

1 个答案:

答案 0 :(得分:0)

我们可以先将关系R转换为3NF然后转换为BCNF。

要将关系R和一组功能依赖关系(FD's)转换为3NF,您可以使用 伯恩斯坦的综合 。申请伯恩斯坦的综合 - 左

  • 首先我们确保给定的一组FD's最小化
  • 第二次我们会将每个FD设为自己的子架构。
  • 第三次我们尝试合并这些子架构
在您的情况下

例如

R = {A,B,C,D,E}
FD's = {A-> BCD,BC-> DE,B-> D,D-> A}

首先我们检查FD's是否为最小封面(单身右手边,没有无关的左侧属性,没有冗余的FD

  • Singleton RHS:我们用单例RHS编写FD。所以现在我们将FD作为{A-> B,A-> C,A-> D,BC-> D,BC-> E,B-> D,D-> A} < / LI>
  • 没有多余的LHS属性:我们从FD CBC->D中移除了无关的LHS属性BC->E。所以现在我们将FD作为{A-> B,A-> C,A-> D,B-> D,B-> E,B-> D,D-> A} < / LI>
  • 没有冗余FD:我们删除了冗余依赖项。现在FD是{A-> B,A-> C,B-> D,B-> E,D-> A}

第二我们使每个FD成为自己的子架构。所以现在我们有 - (每个关系的键都是粗体

[R <子> 1 = {的 A 下,B}
[R <子> 2 = {的 A ,C}
[R <子> 3 = {的下,d}
[R <子> 4 = {的,E}
[R <子> 5 = {的 d 下,A}

第三我们看到是否可以组合任何子模式。我们看到 R 1 R 2 具有LHS,因此可以将它们组合在一起。类似地,可以组合 R 3 R 4 。所以现在我们有 -

S 1 = { A ,B,C}
S 2 = { B ,D,E}
S 3 = { D ,A}

这是 3NF 。现在检查 BCNF ,我们检查是否有任何这些关系(S 1 ,S 2 ,S 3 )违反 BCNF 的条件(每个功能依赖X->Y左侧(X必须是 超级键 )。在这种情况下,这些都不会违反 BCNF ,因此它也会被分解为 BCNF