【发布时间】:2019-09-26 00:23:42
【问题描述】:
实现对其他列“本地”的自动增量键的最佳方法是什么(ie comment id 从每个博客 post 的 1 开始)? p>
例如,在 GitHub 上,问题编号是存储库的本地版本:问题 #1 表示这是您的存储库的第一个问题,并且不必使用更长且看似随机的 ID,从而使每个人的生活更轻松。
例如给定:
CREATE TABLE post (
id bigserial PRIMARY KEY
, title varchar(255) NOT NULL
);
CREATE TABLE "comment" (
post_id bigint REFERENCES post NOT NULL
, id bigint NOT NULL
, "comment" text NOT NULL
, PRIMARY KEY (id, post_id)
);
解决问题的一种方法是计算给定post_id 的所有 cmets 的最大id:
INSERT INTO post (id, title) VALUES (1, 'first post');
INSERT INTO "comment" (post_id, id, "comment") VALUES (
1,
(SELECT COALESCE(MAX(id) + 1, 1) FROM "comment" WHERE post_id = 1 LIMIT 1),
'1st comment of 1st post'
);
^ 这感觉像是一个杂牌,我也担心可能的可序列化问题。
我想知道实现这一点的最佳方法是什么(在 PostgreSQL 下)?谢谢!
【问题讨论】:
-
我喜欢这个问题。但是,我必须说,PK 并不意味着可见或“性感”。它们的目的是确保行的唯一性。话虽如此,我仍然认为需要顺序编号。辅助“可见”列可能有用,尽管它的值可能以延迟方式计算。
-
“辅助“可见”列可能有用,但它的值可能以延迟方式计算。”确实,但是怎么做? =)
标签: sql postgresql auto-increment