首页 > 解决方案 > 我应该更好地使用 VARCHAR(3) 或 BIGINT() 作为 PostgreSQL 的主键吗?

问题描述

我正在播种一个大主表并从某些列生成较小的表。这些较小的表通过外键链接到大表。

小表的每个条目都有 2~3 个字符的唯一代码,因此使用 bigintid存储它们对我来说似乎是多余的。另外,我不需要自动增量。

在这种情况下,我应该将 varchar(3) 类型的代码设置为主键吗?还是 bigint 总是更适合表演?

标签: databasepostgresql

解决方案


在这种情况下,性能并不重要,而且几字节的存储或多或少也不会。

您应该选择最实用的主键。如果有一个自然的三字符唯一标识符,并且您确定该标识符对于现有的表行永远不会改变,那么varchar(3)用作表的主键没有问题。

请注意,有些人认为您应该始终使用数字人工主键。这些人恐怕会不同意,我也不愿意在这里发动圣战。对于这种立场,我听到的唯一令人信服的论点是,除了数字主键之外,还有一些 ORM 和其他抽象层不能使用任何东西。但是,如果您没有被这样的工具所困扰,则不必担心。


推荐阅读