阅读了很多有关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”。
这是可行的方法吗?你会做些什么?
关于,卡尔。