Postgres数据库中的内部和外部实体标识符

时间:2019-05-07 15:27:39

标签: postgresql uuid

阅读了很多有关Postgres DB中用于主键的数据类型的文章,如果我应该将UUID用作PK或BIGINT,我找不到明确的答案。有人认为UUID太大(16字节vs BIGINT为8字节),如果将UUID用作PK(甚至是已排序的PK),则数据库从长远来看会受到影响。如果数据库要支持复制或在群集中运行,则在我的知识之后,BIGINT或任何INT都会引起问题。我会非常设计将数据库扩展到某一天,并且从长远来看不会冒任何问题的风险。

以下是我当前正在处理的表结构的摘录:

table realms (
   pk         uuid         PRIMARY KEY, --only used internally by the DB
   parent     uuid         NULL REFERENCES realms (pk), --same here
   realm_id   varchar(40)  NOT NULL UNIQUE, --used by APIs, backend
   subdomain  varchar(63)  NULL UNIQUE, --used by Web, frontend
   name       varchar(128) NOT NULL UNIQUE --a friendly name for the realm
);

使用ULID软件包在应用程序中生成PK,以获取可排序的UUID兼容值。

使用Go的XID包并在其前面加上“ rlm-”作为前缀来生成realm_id。

子域可以是例如:“ acme”。

这是可行的方法吗?你会做些什么?

关于,卡尔。

0 个答案:

没有答案