SQL:多个INT列作为主键,或者是VARCHAR?

问题描述 投票:0回答:1

如果有下表,创建主键的最佳实践是什么?

这3个INT的组合将始终创建唯一的标识符,因此是我的主键。我应该将所有三列都分配给一个主键吗?

col1  |  col2  |  col3
1        50       1540
2        50       1540
1        50       1541
1        51       1540

仅将单个列主键创建为CHAR(N)VARCHAR,如以下所示,会更聪明吗?

50_1540_1
50_1540_2
50_1541_1
51_1540_1

我正在考虑性能问题,因为表可能超过1亿行

sql primary-key
1个回答
0
投票

哪个更聪明?对于这种特殊情况,将所有三列分配为主键。这是三个原因:

  • 为什么要复制列的空间?
  • 您可能想要保留原始列,因为它们(大概是有意义的。)>
  • 外键关系需要引用所有三列,如果有一个新的串联列,则需要串联所有引用表中的值。
  • 就是说,我不喜欢复合主键。我建议您用unique约束(或索引)声明三个。然后,将一个自动递增的键作为表的主键。

© www.soinside.com 2019 - 2024. All rights reserved.