我有一个Country
表,其中包含ID
,Name
和Code
列。这三列中的所有列都应包含唯一值,且不能为NULL
。
我的问题是,我会更好地在ID
列上创建主键,并为Name
和Code
列创建唯一约束(我想在一个索引中) ,或者只是在Name
的主键中包含Code
和ID
列会更好吗?为什么?具有多列主键是否会产生潜在的缺点或复杂性?
答案 0 :(得分:4)
首先 - 是的,由三列组成的复合主键使得加入此表更加烦人 - 任何其他想要加入Country
表的表格也必须所有三列才能建立联接。
更重要的是 - 它是 NOT 相同的限制!
如果您ID
上的PK以及Code
和Name
上的唯一约束,则 NOT 有效:
ID Code Name
--------------------------
41 CH Switzerland
341 CH Liechtenstein
555 LIE Liechtenstein
因为Code
的{{1}}和CH
的{{1}}都出现了两次。
但是如果你在所有三个列上都有一个PK - 那么这是有效,因为每一行都有不同的元组数据 - (Name
,Liechtenstein
,41
)不与(CH
,Switzerland
,341
)相同,因此,这两行是可以接受的。
如果您同时将PK放在所有三列上,那么唯一性只会扩展到整个元组(所有三列) - 每列分别可以“重复”。
所以它真的归结为