我正在尝试在postgresql中创建一个表来保存用户的工作项。每个工作项在系统中都有一个唯一的ID,但是对于特定的用户也会有一个友好的序列ID。
到目前为止,我一直在使用:
CREATE TABLE WorkItems
(
Id SERIAL NOT NULL PRIMARY KEY,
...
);
但我不知道如何划分每个用户的序列,也不知道如何对序列进行划分。
我希望用户能看到连续的Friendly Id
User1: ids = 1, 2, 3 etc..
User2: ids = 1, 2, 3, 4, 5 etc..
并且不必处理唯一ID,但是那些项目将具有从1-8的唯一ID。
我找了很多,都找不到任何关于这个主题的帖子,也许只是很难指定和搜索?
我是否应该将LastWorkIdUsed存储在用户列中,然后手动为他们的项创建一个友好的ID?看起来我不必担心并发和事务。有没有一种简单的方法可以在生成数字时将每个用户的LastWorkIdUsed传递给Postgresql?
或者,是否有办法将序列分配给用户?
也许我的基本设计思想是错误的,在SQLServer或MySQL中如何实现呢?
3条答案
按热度按时间vc9ivgsu1#
您说您 * 也 * 有一个全局唯一键。您可以使用它来解决并发问题。如果您允许用户工作项编号为空,则可以首先创建工作项,然后执行类似下面的操作为其分配一个“友好”编号。(T-SQL方言,@workItemID是全局唯一ID):
然后这样找出数字:
vx6bjr1n2#
在 表 中 自动 生成 ID 的 最 常见 方法 是 使用 序列 , 如果 序列 用于
int
/bigint
列 , 那么 我 认为 没有 理由 不 对 用户 友好 。下面 是
Postgresql 13.6
的 演示 , 假定postgres
是 表 和 序列 所属 的 用户 :中 的 每 一 个
格式
格式
nextval('user_id_seq'::regclass)
修改 为nextval('public.user_id_seq'::regclass)
( 也 称为 前置 模式 名称 ) 。reference_number
列 , 它 将 从 您 的 后端 代码 ( Spring , Django , FastAPI , Node 等 ) 中 计算 出来 , 它 将 遵循 每个 用户 的 模式 。mnemlml83#
我 觉得 这 是 一 个 " 我要 月亮 " 的 要求 。
如果 您 能 解释 一下 为什么 需要 这种 ID , 那么 在 为 您 寻找 解决 方案 时 , 它 将 与 我们 更 相关 。
在 我 看来 , 你 似乎 想要 一 个 用户 工作 的 线索 。
因此 , 现在 您 只需 连接 这些 表 并 按 committed _ on 排序 , 并 将 编号 ( 或 不 编号 ) 留给 您 的 应用 程序 。