簡體   English   中英

在 SQL 表中,如何確保在每一行中,一個屬性引用同一表中的另一組屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM