2014-03-03 61 views
0

我有一个Country表,其中包括列ID,NameCode。所有这三列应包含唯一值,不能是NULL多列主键或唯一约束?

我的问题是,我会更好地建立在ID列主键,为NameCode列的唯一约束(在一个指标,我猜的),或者这将是最好只包括NameCode列中的主键与ID?为什么?有多列主键会带来潜在的不利因素或复杂性吗?

回答

4

首先 - 是的,复合主键由三列使其更恼人的加入到这个表 - 任何其他表想加入到Country表将必须有所有三列建立连接。

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

如果你有两个CodeNameID的PK和唯一约束分开,那么这是有效:

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

因为CHCodeLiechtenstein两个Name出现两次。

但是,如果你对所有三列的单人PK在一起 - 那么这就是有效,因为每一行都有不同的元组数据的 - (41CHSwitzerland)是一样( 341,CH,Liechtenstein),因此,这两行是可以接受的。

如果你把PK上的所有三列一次,然后独特只延伸到整个元组(所有三列) - 每列分别可以“重复”。

所以它真的归结为

  • 你真正需要(其独特性)
  • 你想怎么容易使其加入到这个表
+1

很好的解释,谢谢。我知道这两个限制之间的区别,但我认为化合物PK可以允许('41,CH,瑞士')和('555,CH,瑞士'),这显然是不可取的。无论如何,加入这张桌子的额外困难使得我的决定变得容易。 –

+0

真的很棒的答案,马克。一种风格建议:你可以考虑使用*强调*而不是**粗体**。 –