我有一个 Country
表,其中包含 ID
、Name
和 Code
列。所有这三列都应包含唯一值,并且不能为 NULL。
我的问题是,我是否最好在 ID
列上创建主键,并为 Name
和 Code
创建唯一约束列(我猜是在一个索引中),或者最好只在主键中包含 Name
和 Code
列以及 ID
>?为什么?多列主键是否会带来潜在的缺点或复杂性?
最佳答案
首先 - 是的,由三列组成的复合主键使得连接到该表变得更烦人 - 任何其他想要连接到 Country
表的表也必须具有所有三列建立连接。
更重要的是 - 它不相同的限制!
如果您在 ID
上有 PK,并且对 Code
和 Name
分别有唯一约束,那么这是无效有效的:
ID Code Name
--------------------------
41 CH Switzerland
341 CH Liechtenstein
555 LIE Liechtenstein
因为Code
的CH
和Name
的Liechtenstein
都出现了两次。
但是,如果您在所有三列上都有一个 PK - 那么这是有效,因为每行都有不同的元组数据 - ( 41
、 CH
、 Switzerland
) 与 ( 341
、 CH
、 Liechtenstein
) 不相同,因此这两行是可接受的。
如果您同时将 PK 放在所有三列上,则唯一性仅扩展到整个元组(所有三列) - 每列分别可以有“重复项”。
所以它实际上归结为
- 您真正需要什么(独特性)
- 您希望加入此表的过程有多简单
关于sql - 多列主键还是唯一约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22153935/