假设我有一个表R
,其属性为A
、B
、C
,其中A
是主键。假设我有多值依赖项B->-> C。我将表R
分解为两个新表R1
和R2
,其中R1
有属性A
、B
和key A
,R2
具有属性B
、C
。R2
的主键是什么?
我认为答案应该是:由于4NF要求每个MVD的左边应该是一个超级键,那么在新的表中,键将是B,尽管整个属性集也可以是一个超级键(尽管这是一个微不足道的属性,但在4NF分解中这并不重要)。所以,这是我的猜测。
根据Catcall的优秀建议,由于B的多值依赖性,生成的R2表将有许多行具有重复的值。键的替代选项是C本身以及B和C。如果C->B持有,则c可以是主键,在这种情况下,C可以作为主键。因此,在这种情况下,唯一的键是B,c。有人能检查我的推理是否正确吗?
发布于 2012-09-05 10:33:54
如果我没听错的话,你有:
A -> B
和
B ->-> C
这意味着,对于A的每一个值,只有一个B的值,而对于B的每个值,有许多的C值。
分解后使(A,B)成为R1的超键,(B,C)成为R2的超键。
因此,到目前为止,理由是正确的。然而,我不认为你能在现实世界中结束。如果您正在设计数据库,您还需要问以下问题:
https://stackoverflow.com/questions/10275080
复制相似问题