0
我有一个Country
表,其中包括列ID
,Name
和Code
。所有这三列应包含唯一值,不能是NULL
。多列主键或唯一约束?
我的问题是,我会更好地建立在ID
列主键,为Name
和Code
列的唯一约束(在一个指标,我猜的),或者这将是最好只包括Name
和Code
列中的主键与ID
?为什么?有多列主键会带来潜在的不利因素或复杂性吗?
我有一个Country
表,其中包括列ID
,Name
和Code
。所有这三列应包含唯一值,不能是NULL
。多列主键或唯一约束?
我的问题是,我会更好地建立在ID
列主键,为Name
和Code
列的唯一约束(在一个指标,我猜的),或者这将是最好只包括Name
和Code
列中的主键与ID
?为什么?有多列主键会带来潜在的不利因素或复杂性吗?
首先 - 是的,复合主键由三列使其更恼人的加入到这个表 - 任何其他表想加入到Country
表将也必须有所有三列建立连接。
更重要的是 - 它是不是相同的限制!
如果你有两个Code
和Name
上ID
的PK和唯一约束分开,那么这是不有效:
ID Code Name
--------------------------
41 CH Switzerland
341 CH Liechtenstein
555 LIE Liechtenstein
因为CH
的Code
和Liechtenstein
两个Name
出现两次。
但是,如果你对所有三列的单人PK在一起 - 那么这就是有效,因为每一行都有不同的元组数据的 - (41
,CH
,Switzerland
)是不一样( 341
,CH
,Liechtenstein
),因此,这两行是可以接受的。
如果你把PK上的所有三列一次,然后独特只延伸到整个元组(所有三列) - 每列分别可以“重复”。
所以它真的归结为
很好的解释,谢谢。我知道这两个限制之间的区别,但我认为化合物PK可以允许('41,CH,瑞士')和('555,CH,瑞士'),这显然是不可取的。无论如何,加入这张桌子的额外困难使得我的决定变得容易。 –
真的很棒的答案,马克。一种风格建议:你可以考虑使用*强调*而不是**粗体**。 –