create table matches ( match_id bigserial primary key, tournamentid integer, winner_id integer, loser_id integer check (winner_id != loser_id), draw boolean, foreign key(tournamentid, winner_id) references enroll(tournament, player_id), foreign key(tournamentid, loser_id) references enroll(tournament, player_id), unique(tournamentid, winner_id, loser_id) ); this current match table schema. m trying figure out way prevent player 1 playing against player 2 twice. example have followings:
insert matches(tournamentid, winner_id, loser_id, draw) values('1', '2', '3', 'false');
insert matches(tournamentid, winner_id, loser_id, draw) values('1', '3', '2', 'false');
these 2 queries same , both allowed. question if there's way disallow second query?
i don't think can schema. dbmss allow subqueries in check constraints, could've been used here.
instead, can try:
create table matches ( match_id bigserial primary key, tournamentid integer, player1_id integer, player2_id integer check (player1_id < player2_id), result smallint check (result in (0, 1, 2)), foreign key(tournamentid, player1_id) references enroll(tournament, player_id), foreign key(tournamentid, player2_id) references enroll(tournament, player_id), unique(tournamentid, player1_id, player2_id) ); where 0 indicates draw, 1 or 2 win corresponding player.
Comments
Post a Comment