查找密钥并将其分解为 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.
我有这个关系:
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.
注意-其中一些步骤的重要性在此示例中可能不清楚。查看其他示例