查找密钥并将其分解为 BCNF

Find keys and decompose it into BCNF

我有这个关系:

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 规范化关系。我试图阅读相关和类似的问题,但我无法理解给定的答案。希望有人能帮我完成这个作业

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

我们有,

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

这里的关键是ADEH.

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

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

  • 首先我们确保给定的FD's集合是最小覆盖
  • 其次 我们将每个 FD 设为自己的子模式。
  • 第三我们尝试组合那些子模式

例如你的情况:

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

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

其次 我们让每个 FD 都有自己的子模式。所以现在我们有 - (每个关系的键以粗体显示

R1={A,B}
R2={A,C}
R3={E,F}
R4={A,H,G}

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

S1 = {A,B,C}
S2 = {E,F}
S3 = {A,H,G}

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

S4 = {A,D,E,H}

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

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