Postgres如何使2个数字字段彼此唯一

Posted

技术标签:

【中文标题】Postgres如何使2个数字字段彼此唯一【英文标题】:Postgres how can I make 2 numerical fields unique to each other 【发布时间】:2016-02-02 17:05:43 【问题描述】:

我正在尝试做许多社交网络都有的追随者/追随者类型的概念。我有 2 个名为 mefollowing 的 INT 字段,这些 INT 字段由用户唯一 ID 组成。我想这样做,如果用户 23 正在关注用户 7 或 23->7,那么用户 23 不能再次关注用户 7,因为关系已经存在。这张图就清楚了

注意上面前 2 行是 31->27 或用户 31 跟随 27 两次,这是多余的。是否有一些约束可以用来防止这种情况发生?我正在使用 postgres 9.4 版

【问题讨论】:

【参考方案1】:

您可以通过创建唯一索引来做到这一点。但不仅仅是任何唯一索引,一个关于表达式的:

create unique index unq_t_me_following
    on (least(me, following), greatest(me, following));

【讨论】:

以上是关于Postgres如何使2个数字字段彼此唯一的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Postgres 9.6+ 中生成长度为 N 的随机、唯一的字母数字 ID?

如何使唯一数组的自定义验证规则依赖于其他字段 laravel

Django 中的唯一模型字段和区分大小写(postgres)

Django 中的唯一模型字段和区分大小写(postgres)

当列值是 84 字节文本字段时,postgres 中保持列唯一的最有效方法是啥?

如何使堆叠的卡片动画以彼此落后