[英]In an SQL table, how to make sure, in each line, an attribute references another set of attributes from the same table?
我是 SQL 初學者,試圖為 1v1 游戲中的錦標賽創建數據庫。 我有一個這樣的表,記錄了每場比賽:
CREATE TABLE Games(
Player_1 VARCHAR NOT NULL,
Player_2 VARCHAR NOT NULL,
Winner VARCHAR NOT NULL,
Primary KEY(Player_1, Player_2)
)
我如何確保每個獲勝者都是來自同一行的 Player_1 或 Player_2? Winner 是外鍵嗎?
謝謝
我試過這個:
CREATE TABLE Games(
Player_1 VARCHAR NOT NULL,
Player_2 VARCHAR NOT NULL,
Winner VARCHAR NOT NULL CHECK( (Winner in Player_1) OR (Winner IN Player_2) ),
Primary KEY(Player_1, Player_2)
)
但是得到了一個錯誤信息:CHECK constraints prohibited subqueries
經驗法則:如果您有 column1 和 column2,您應該使用連接表。
create table games (
-- or however your database does auto incrementing primary keys
id bigint primary key auto_increment
);
create table players (
id bigint primary key auto_increment,
name varchar(255) not null
);
create table game_players (
player_id bigint references players(id),
game_id bigint references games(id),
winner smallint default 0
);
現在獲勝者必須是游戲的玩家之一,您可以輕松地跨游戲跟蹤您的玩家。
使用觸發器確保游戲只有兩名玩家和一名獲勝者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.