我有两个名为表players
在一个Postgres数据库& matches
如下:如何用独特的组合主键创建postgres表?
CREATE TABLE players (
name text NOT NULL,
id serial PRIMARY KEY
);
CREATE TABLE matches (
winner int REFERENCES players (id),
loser int REFERENCES players (id),
-- to prevent rematch btw players
CONSTRAINT unique_matches
PRIMARY KEY (winner, loser)
);
我如何可以确保只有要么(winner, loser)
或(loser, winner)
的独特组合用于matches
主键,以便matches
表赢“T允许的插入:
INSERT INTO matches VALUES (2, 1);
如果它已经含有VALUES (1, 2)
像的行:
winner | loser
--------+-------
1 | 2
目标是避免输入相同球员之间的比赛。
谢谢@Erwin。它的工作就像一个魅力;)然而,是否有一个原因,你建议使用“串行”列作为PK,而不是我以前的方式('PRIMARY KEY(赢家,输家)')?再次感谢: ) –
@BakakK:你说的对,'PRIMARY KEY(赢家,输家)'会这样工作。而且有两个整数列,它也非常有效。如果您有FK对表的引用,那么使用单列代理PK可能会更简单。 –