1

假设我有一个R带有属性A, B,的表,主键C在哪里。A假设我有多值依赖 B->-> C。我将表分解R为两个新表R1R2其中R1有 attributes ABkeyAR2has attributes BC。主键是干什么用的R2

我认为答案应该是:由于 4NF 要求每个 MVD 的左侧都应该是一个超级键,那么在新表中,键将是 B,尽管整个属性集也可能是一个超级键(虽然是一个微不足道的属性,但那不是'我认为在 4NF 分解中无关紧要)。所以,这是我的猜测。

根据 Catcall 的出色建议,由于 B 的多值依赖性,生成的 R2 表将有许多行与 B 的重复值。键的替代选项是 C 本身以及 B 和 C 一起。如果 C->B 成立,C 可以是主键,在这种情况下它不是。因此,在这种情况下,唯一的关键是 B,c。有人可以检查我的推理是否正确吗?

4

1 回答 1

2

如果我理解正确,您有:

A -> B

B ->-> C

这意味着对于 A 的每个值,只有一个 B 的值,而对于 B 的每个值,都有许多 C 的值。

分解后,这使得 (A, B) 成为 R1 的超级键,而 (B, C) 成为 R2 的超级键。

所以到目前为止的推理是正确的。但是,我不认为你可以在现实世界中结束。如果你正在设计一个db,你还想问以下问题:

  1. 以下是真的吗?C -> B 如果是这样,C 将是您的主键,而 (B, C) 将是超级键。
  2. 以下是真的吗?C ->-> B 如果是这样,您基本上在其他两个实体之间有一个多对多的连接。
于 2012-09-05T10:33:54.360 回答