在2NF中,部分依赖可以有复合主键吗?

时间:2015-10-11 23:25:18

标签: database primary-key database-normalization composite-primary-key functional-dependencies

我看到的部分依赖性的所有例子都只有一个属性作为主键。

A,B,C -> D,E,F
A,B-> D (composite PK)

我可以说“A,B-> D”是部分依赖“A,B,C - > D,E,F”吗?

2 个答案:

答案 0 :(得分:1)

我可以推断,你问的是分解是否会涉及具有复合PK的新表,因为到目前为止你只看到了单个属性键的例子。

是。我们的想法是,如果您可以通过主键的一个部分(无论是单个属性还是多个)唯一地确定一个或多个非主要属性,那么您应该为此创建一个单独的表。

因此,如果A,B -> D,则创建另一个{A, B, D}表,并从较大的表中删除重复。

This link显示删除此冗余后单个表被分为两个,尽管它也使用单个属性作为键。不过,你可以通过最初查看表格并将其划分后得到这个想法。

答案 1 :(得分:0)

TL; DR 你的头衔问题是FD格式错误,你的第一句话是FD格式错误,你要求说的是不正确的FD。 (请通过正确使用术语来重新解释您的问题以理解FD。请将您的句子之间的联系清楚并解释您的示例。)

我们说FD(功能依赖)X - > Y保持或Y在功能上依赖于X或者X在功能上确定Y或者Y在功能上由X确定。我们经常将“功能性”排除在外。我们说X - >当X的一些较小/适当的子集也确定Y时,Y是部分的。术语“部分”出现是因为Y仅依赖于X的部分。非部分的FD是满的。请注意,CKs(候选键)不参与。

A,B,C -> D,E,F
A,B-> D (composite PK)

标准化涉及CK。它涉及PK(主键)的唯一方法是有一个与标准化无关的传统,选择一个CK称为“PK”。当然,如果只有一个CK,那么它是PK的唯一选择,我们可以称之为PK。

我假设A-F是某个关系值或变量的唯一属性。如果这两个FD(以及那些在其关闭而没有其他FD)中持有,那么{A,B} 一个CK。 {A,B,C}是唯一的CK。

  

我可以说“A,B-> D”是部分依赖“A,B,C - > D,E,F”吗?

从来没有FD“是”不同的FD。也许你的意思是“是的部分FD ”。但是说FD“是某些FD的部分FD”是没有意义的。我不知道你的“我可以说”是否意味着“这是真的吗”还是“说得有意义”。但这样说是没有意义的。我不知道你想问什么。

但是有些事情是真的:

{A,B,C} - > {D,E,F}不是部分的,因为{A,B,C}的较小/适当子集不确定{D,E,F}。 {A,B} - > {D}不是部分因为{A,B}没有较小/适当的子集确定{D}。但{A,B,C} - > {D}是部分的,因为{A,B,C}的较小/适当的子集{A,B}确定{D}。

当没有非素数属性部分依赖于CK时,关系是2NF。即所有非素数属性在功能上完全依赖于每个CK。由于非素数属性{D}部分依赖于CK {A,B,C},因此该关系值或变量不在2NF中。

  

在2NF中,部分依赖可以有复合主键吗?

这也没有意义。部分FD不“具有”PK或CK。我不知道你想问什么。也许你的意思是“决定性”而不是“PK”。

  

我看到的部分依赖性的所有例子都只有一个属性作为主键。

这也没有意义,因为依赖关系不会“拥有”PK或CK。也许你想说的是,你所看到的部分FD的所有例子都是只有一个属性作为CK的关系。也许你试图说你看到的部分FD的所有例子都只有一个属性作为决定因素

部分FD可以具有单属性决定因素的唯一时间是{}是其子集决定因素。即{J} - > Y是部分然后{} - > Y.这是每个元组中Y子行值相同的时候。所以你可能从未想过部分依赖而不是有一个复合决定因素。 (所以你可能没有意味着“PK”的“决定因素”。)

(我也不能将这三个引用相互连接或你的例子。)