我有兩個名爲表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可能會更簡單。 –