如何自动增加作用于另一个表的非主ID列?

Jos*_*ith 6 sql postgresql

让我们假设我们正在构建GitHub并且我们有两个表:reposissues.每个GitHub仓库都有一系列问题,因此该issues表有一个外键repo_id.

现在,当您浏览GitHub repo的问题时,您不希望暴露于内部id.相反,你想要一个类似a的东西number,1..n它只从那个存储库递增.您希望新回购中的第一个问题被编号1,而不是idGitHub上的问题的下一个问题.

当然,您需要一种增量方式,并且您希望确保number在作用于回购的范围时它是唯一的.因此,您特别希望避免任何可以生成两次相同数字的竞争条件.

处理这个问题最简单的方法是什么?触发器?还有别的吗?

我正在使用PostgreSQL,但更喜欢可能的vanilla SQL方法,例如触发器.如果有一个更简单的Postgres方法,那么这也是有用的.

任何展示您的方法的代码都非常有用.谢谢!

Lau*_*lbe 0

我将保留一latest_issuerepos并将其初始化为 0。
在中我将创建一个带有约束的issues列,其中的外键列在哪里nrUNIQUE(repo_id, nr)repo_idissues

每当创建问题时,latest_issueinrepos都会增加。然后使用该数字nr作为issues