让我们假设我们正在构建GitHub并且我们有两个表:repos和issues.每个GitHub仓库都有一系列问题,因此该issues表有一个外键repo_id.
现在,当您浏览GitHub repo的问题时,您不希望暴露于内部id.相反,你想要一个类似a的东西number,1..n它只从那个存储库递增.您希望新回购中的第一个问题被编号1,而不是idGitHub上的问题的下一个问题.
当然,您需要一种增量方式,并且您希望确保number在作用于回购的范围时它是唯一的.因此,您特别希望避免任何可以生成两次相同数字的竞争条件.
处理这个问题最简单的方法是什么?触发器?还有别的吗?
我正在使用PostgreSQL,但更喜欢可能的vanilla SQL方法,例如触发器.如果有一个更简单的Postgres方法,那么这也是有用的.
任何展示您的方法的代码都非常有用.谢谢!
我将保留一latest_issue列repos并将其初始化为 0。
在中我将创建一个带有约束的issues列,其中的外键列在哪里nrUNIQUE(repo_id, nr)repo_idissues。
每当创建问题时,latest_issueinrepos都会增加。然后使用该数字nr作为issues。