我正在尝试将以下关系分解为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把我甩了。
发布于 2012-04-09 02:45:28
给定的
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 -> A3NF分解的工作原理如下:
1)为规范封面中的每个依赖项创建表
R1(A,B,C) R2(B,E) R3(C,D) R4(A,D)2)确定R的候选键。如果步骤1的表中没有候选键,则添加一个仅包含候选键属性的新表。
这里A是一个候选键,它包含在R1 (和R4)中,所以不应该添加新的表。
3)如果存在一个表,它的属性是另一个表的属性子集,则删除“包含”表。
这不适用,因此3NF分解保持不变。
如你所见,循环依赖不是问题。
https://stackoverflow.com/questions/9418210
复制相似问题