PostgreSql - 独特的行,与订单无关

时间:2016-09-04 18:26:18

标签: sql database postgresql database-design

我对当前的问题有点困难

  

某个成员与另一个成员匹配 - 它只能出现一次。

说我们有一个名为Member的表和另一个名为Match

的表
   Member
-------------
| id | name |
-------------
| 1  | bob  |
| 2  | tim  |



      Match
------------------------
| memberid | requestid |(memberid is a foreign key to member same as requestid)
-------------------------
| 1        |     2     |

然而现在请求来自memberid 2并且它应该拒绝它,我试图找到该类型的约束或索引的名称。这是唯一/匹配但不重要的是哪一列。

所以这应该是无效的

      Match
------------------------
| memberid | requestid |(memberid is a foreign key to member same as requestid)
-------------------------
| 1        |     2     |
| 2        |     1     |

我唯一的想法是在memberid <> requestid添加约束。但我认为可能有更好的方法

1 个答案:

答案 0 :(得分:1)

如果您尝试只有一行对,那么您可以使用唯一约束。关键是在表达式上构建唯一索引:

create unique index unq_matches_memberid_requestid
    on matches(least(memberid, requestid), greatest(memberid, requestid));