2

我对无关属性的概念和正确分解为 3NF 有点困惑。

例如,我有以下关系:

r(A,B,C,D,E,F)

F = FD's
F = {A-> BCD, BC-> DE, B->D, D->A}

我想计算规范覆盖,以便使用算法将其分解为 3NF。所以我必须从 FD 中删除无关的属性。

我计算A+. B+, C+, D+ (A+ = ABCDE, B+ = BD, C+ = C, D+ = AD) 我开始试图找到无关的属性。首先,我查看了 β 中的属性

我试图找出 D 是否无关紧要

公元前 -> 德

并且使用 BC+ 我发现 D 是无关的(因为 BC+ 包含属性 D)。所以现在我的 FD 改变了,BC -> DE to BC -> E 现在我尝试计算 α 的无关属性。

我查看了 B 或 C 在 FD 中是否无关紧要BC -> DE(计算 B+ 和 C+ 导致我发现 B 或 C 都不是无关紧要的,因为它们都不包含 E)。

我还查看了 A -> BCD 中的无关属性,发现 B 和 C 都是无关的(因为 A+ 包含所有属性)。所以我只剩下以下内容:

A -> D
BC -> E
B -> D
D -> A

抱歉这个问题太长了,我只是想写下我做了什么。

我很困惑这是否正确,或者我是否正确地做到了这一点。我正在尝试遵循一些注释和一些在线参考资料,但如果有人能指出我是否这样做正确并且如果没有尝试并解释一下以正确找到无关属性和分解,那就太好了。

4

1 回答 1

1

您的某些闭包是错误的(B+ = ABCDE,例如由于 B->D,D->A,A->BCD,BC->DE)。

B 和 C 在 A->BCD 中不是无关紧要的。实际上,关于 A 的闭包

{A -> D, BC -> E, B -> D, D -> A}

是 AD 而不是 ABCDE。

因此,让我们回溯到您的上一步:

{A-> BCD, BC-> E, B->D, D->A}

D 在 A->BCD 中是无关的,因为 A->B 和 B->D。我们从 A-> BCD 中消除 D 并得到:

{A-> BC, BC-> E, B->D, D->A}

C 在 BC->E 中是无关的。事实上,B->D、D-​​>A、A-> BC。因此,

{A-> BC, B-> E, B->D, D->A}

接下来,我们将所有 fds 与相同的左侧合并:

{A-> BC, B-> DE, D-> A}

这组函数依赖不包含冗余依赖或无关属性,因此是规范覆盖。

于 2012-04-08T14:08:54.603 回答