0

所以我有这组关系

AB->CDEF

G->H,我

ABJ->K

C->L

我应该如何分解这个?我感到很困惑。我应该先找到一组超级密钥吗?

4

1 回答 1

1

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

要将关系R和一组函数依赖项(FD's)转换为3NF您可以使用伯恩斯坦的综合。应用伯恩斯坦的综合 -

  • 首先我们确保给定的集合FD's最小覆盖
  • 其次,我们采用每个FD并使其成为自己的子模式。
  • 第三,我们尝试结合这些子模式

例如在你的情况下:

R = {A,B,C,D,E,F,G,H,I,J,K,L}
FD's = {AB->CDEF,G->HI,ABJ->K,C->L}

首先我们检查是否FD's是最小覆盖(单例右侧,没有多余的左侧属性,没有多余的 FD

  • Singleton RHS:我们用单例 RHS 编写 FD。所以现在我们有 FD 为 {AB->C, AB->D, AB->E, AB->F, G->H, G->I, ABJ->K, C->L}
  • 没有无关的 LHS 属性:如果有的话,我们会删除无关的 LHS 属性。这里没有无关的 LHS 属性。
  • 没有多余的 FD:如果有的话,我们会删除多余的依赖项。现在 FD 是 {AB->C, AB->D, AB->E, AB->F, G->H, G->I, ABJ->K, C->L}

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

R 1 ={ A,B ,C}
R 2 ={ A,B ,D}
R 3 ={ A,B ,E}
R 4 ={ A,B ,F}
R 5 ={ G ,H}
R 6 ={ G ,I}
R 7 ={ A,B,J ,K}
R 8 ={ C ,L}

第三,我们将所有子模式与相同的 LHS 结合起来。所以现在我们有 -

S 1 = { A,B ,C,D,E,F}
S 2 = { G ,H,I}
S 3 = { A,B,J ,K}
S 4 = { C ,L}

由于上述分解的关系都不包含R的键,我们需要创建一个附加的关系模式,其中包含R的键形式的属性。这是为了确保保留依赖关系的无损连接分解。所以我们添加 -

S 5 = { A,B,G,J }

ABGJ 是原始关系 R 的键

这是在3NF中。现在要检查BCNF,我们检查这些关系中的任何一个(S 1,S 2,S 3,S 4,S 5)是否违反了BCNF的条件(即,对于每个函数依赖X->Y,左侧 ( X)必须超键) . 在这种情况下,这些都没有违反BCNF,因此它也被分解为BCNF

注意 - 在此示例中,其中一些步骤的重要性可能不清楚。在此处此处查看其他示例。

于 2016-02-27T04:45:41.547 回答