数据库无关属性和分解

Database extraneous attributes and decomposition

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

例如,我有以下关系:

1
2
3
4
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)
我开始尝试寻找无关的属性。首先,我查看了 ?2

中的属性

我试图在

中查找 D 是否无关紧要

BC -> DE

并且使用 BC 我发现 D 是无关的(因为 BC 包含属性 D)。
所以现在我的 FD 从 BC -> DE to BC -> E
现在我尝试计算 ?±.

的无关属性

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

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

1
2
3
4
A -> D
BC -> E
B -> D
D -> A

对不起,这个问题太长了,我只是想写下我做了什么。

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


您的某些闭包是错误的(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}

接下来我们将所有具有相同左侧的 fd 组合起来:

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

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