多列主键还是唯一约束?

时间:2014-03-03 18:01:37

标签: sql indexing primary-key

我有一个Country表,其中包含IDNameCode列。这三列中的所有列都应包含唯一值,且不能为NULL

我的问题是,我会更好地在ID列上创建主键,并为NameCode列创建唯一约束(我想在一个索引中) ,或者只是在Name的主键中包含CodeID列会更好吗?为什么?具有多列主键是否会产生潜在的缺点或复杂性?

1 个答案:

答案 0 :(得分:4)

首先 - 是的,由三列组成的复合主键使得加入此表更加烦人 - 任何其他想要加入Country表的表格必须所有三列才能建立联接。

更重要的是 - 它是 NOT 相同的限制!

如果您ID上的PK以及CodeName上的唯一约束,则 NOT 有效:

ID    Code     Name
--------------------------
41    CH       Switzerland
341   CH       Liechtenstein
555   LIE      Liechtenstein

因为Code的{​​{1}}和CH的{​​{1}}都出现了两次。

但是如果你在所有三个列上都有一个PK - 那么这是有效,因为每一行都有不同的元组数据 - (NameLiechtenstein41与(CHSwitzerland341)相同,因此,这两行是可以接受的。

如果您同时将PK放在所有三列上,那么唯一性只会扩展到整个元组(所有三列) - 每列分别可以“重复”。

所以它真的归结为

  • 你真正需要的是什么(哪种独特性)
  • 您希望如何轻松地加入此表格