0

我正在尝试将以下关系分解为 3NF:

A -> BCD
BC -> DE
C -> D
D -> A

所以我消除了冗余以获得规范的封面:

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

现在我正在尝试将其分解为 3NF。

我应该分解成r1(A, B, C) r2(B, D), r3(C, D). 那我该怎么办D -> A

A -> B -> D -> A让我失望的事实。

4

1 回答 1

1

给定

A -> BCD
BC -> DE
C -> D
D -> A

为了获得一个规范的覆盖,我们首先从 BC->DE 中删除 D:

A -> BC
BC -> E
C -> D
D -> A

接下来,我们观察到 C->D、D-​​>A、A->BC,如果我们知道 B->E,那么我们也知道 C->E。因此,

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

3NF 分解的工作原理如下:

1)为规范封面中的每个依赖项创建表

R1(A,B,C) R2(B,E) R3(C,D) R4(A,D)

2)确定R的候选键。如果步骤1的表中不包含候选键,则添加一个仅包含候选键属性的新表。

这里 A 是候选键,它包含在 R1(和 R4)中,因此不应添加新表。

3)如果存在一个表,其属性是另一个表的属性的子集,则删除“包含”表。

这不适用,因此 3NF 分解保持不变。

如您所见,循环依赖没有问题。

于 2012-04-08T18:45:28.383 回答