使两列双向唯一

pea*_*ear 6 postgresql trigger index database-design constraint

我正在创建一个存储足球比赛的数据库。

每轮,任何特定的足球俱乐部只能踢一场比赛(主场或客场)。

例如,插入后

INSERT INTO Match (Round, Home, Away) VALUES (1, Barcelona, Real);

插入例如

INSERT INTO Match (Round, Home, Away) VALUES (1, Bayern, Barcelona);

INSERT INTO Match (Round, Home, Away) VALUES (1, Barcelona, Bayern);

必须被禁止,因为巴塞罗那已经在第一轮与皇马打了一场比赛。他们不应该能够在同一轮对阵拜仁(无论是主场还是客场)。

如何确保不会发生此类插入?

我使用触发器吗?某种唯一的索引组合?我两种都尝试过,但都迷路了,实际上并没有得到预期的结果。

谢谢

Erg*_*sha 4

通过 2 个独特的约束,您可以实现所需的限制:

create unique index on match (round, least(home, away));
create unique index on match (round, greatest(home, away));
Run Code Online (Sandbox Code Playgroud)

检查这里的小提琴