0

我有这个关系:

wiki(url,title,abstract,link,category_id,category,heading,heading_pos)

FD是:

F = {
    url → title, abstract
    category_id → category
    url, heading_pos → heading
}

我需要找到键并分解为一组 Boyce-Codd 规范化关系。我试图阅读相关和类似的问题,但我无法理解给定的答案。希望有人能帮助我完成这项任务

4

1 回答 1

0

假设'wiki'为关系R,其属性url,title,..heading_pos分别为A,B,...H

我们有,

R = {A,B,C,D,E,F,G,H}
FD's = {A->BC, E->F, AH->G}

这里的关键是ADEH

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

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

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

例如在你的情况下:

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

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

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

R 1 ={ A ,B}
R 2 ={ A ,C}
R 3 ={ E ,F}
R 4 ={ A,H ,G}

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

S 1 = { A ,B,C}
S 2 = { E ,F}
S 3 = { A,H ,G}

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

S 4 = { A,D,E,H }

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

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

于 2016-03-29T14:26:55.783 回答