-3
我只是想知道我是否正確使用CHECK
約束。我想確保winner
和loser
行彼此不同。有人可以檢查我的sql是否有效[postgresql]
CREATE TABLE players (
id SERIAL PRIMARY KEY,
player_name VARCHAR
);
CREATE TABLE matches (
id SERIAL PRIMARY KEY,
winner INT REFERENCES players(id) ON DELETE CASCADE,
loser INT REFERENCES players(id) ON DELETE CASCADE,
CHECK (winner <> loser)
);
還有其他表(如VIEW
)使用它們。
CREATE VIEW view_wins AS
select players.id AS view_wins_id, count(matches.id) AS wins
FROM players LEFT OUTER JOIN matches
ON players.id = matches.winner
GROUP BY players.id;
CREATE VIEW view_played AS
SELECT players.id AS view_played_id, count(matches.id) AS played
FROM players LEFT OUTER JOIN matches
ON players.id = matches.winner OR players.id = matches.loser
GROUP BY players.id;
CREATE VIEW standings AS
SELECT players.id, players.player_name, view_wins.wins AS total_wins, view_played.played AS matches_played
FROM players, view_wins, view_played
WHERE players.id = view_wins_id AND players.id = view_played_id
ORDER BY total_wins DESC;
CREATE VIEW next_round AS
SELECT players.id AS player1_id, players.player_name AS player1_name,
players.id AS player2_id, players.player_name AS player2_name
FROM standings
WHERE player1_id.wins = player2_id.wins;
是的,'check'是罰款。注意:StackOverflow不是要求推薦的站點,工具,庫等的地方。請參閱[我可以在這裏詢問什麼主題?](http://stackoverflow.com/help/on-topic)中的第4點。 – trincot
@trincot哦對不起。你知道任何網站我可以得到我的代碼檢查?這對於像我這樣的初學者會非常有幫助。 – MonocleBoo
要讓人們查看您的(功能)代碼,請參閱[代碼評論](https://codereview.stackexchange.com/help/on-topic)。但請務必首先檢查他們的幫助中心,這樣您就一定會問題。 – trincot