0

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

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

得到答案的过程是什么?

4

1 回答 1

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}
  • 没有多余的 LHS 属性:我们C从 FDBC->D和中删除了多余的 LHS 属性BC->E。所以现在我们有 FD 为 {A->B, A->C, A->D, B->D, B->E, B->D, D->A}
  • 没有多余的 FD:我们删除了多余的依赖项。现在 FD 是 {A->B, A->C, B->D, B->E, D->A}

其次,我们使每个子模式都有FD自己的子模式。所以现在我们有了 - (每个关系的键都是粗体的

R 1 ={ A ,B}
R 2 ={ A ,C}
R 3 ={ B ,D}
R 4 ={ B ,E}
R 5 ={ D ,A}

第三,我们看看是否可以组合任何子模式。我们看到R 1R 2具有 LHS,因此它们可以组合。类似地, R 3R 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

于 2015-12-19T13:31:17.313 回答