【问题标题】:Using foreign keys with multiple tables对多个表使用外键
【发布时间】:2017-05-06 00:09:37
【问题描述】:

我在创建数据库时遇到问题。我虚构的问题是创建用于跟踪排球比赛的数据库。它应该包含有关球员的信息(他们参加的球队,一名球员只能在一支球队中比赛),以及参加过的比赛(每场比赛每支球队有 6 名球员)。

我想创建以下表格:

  • 玩家(Id P,Name,Surname,Team_Name F) ;
  • 团队(Team_Name P,Coach);
  • 比赛(日期,Team1 F,Team2 F,Player1_Team1 F,...Player2_Team2 F,Player1_Team2 F,...,Player2_Team2 F)。

我希望 Team1 和 Team2 是 Team 表中的外键 Team_Name。这是我的尝试,我发现外键格式不正确。我会很高兴得到帮助。

CREATE TABLE Team (
    Team_Name varchar(20)  NOT NULL,
    Coach varchar(20)  NOT NULL,
    CONSTRAINT Team_pk PRIMARY KEY (Team_Name)
);


CREATE TABLE Game (
    id int  NOT NULL,
    Data date NOT  NULL,
    Team1 varchar(20)   NOT NULL,
    Team2 varchar(20)  NOT NULL,
    Score int  ,
    D1_Player1 int  NOT NULL,
    D1_Player2 int  NOT NULL,
    D1_Player3 int  NOT NULL,
    D1_Player4 int  NOT NULL,
    D1_Player5 int  NOT NULL,
    D1_Player6 int  NOT NULL,
    D2_Player1 int  NOT NULL,
    D2_Player2 int  NOT NULL,
    D2_Player3 int  NOT NULL,
    D2_Player4 int  NOT NULL,
    D2_Player5 int  NOT NULL,
    D2_Player6 int  NOT NULL,
    CONSTRAINT Game_pk PRIMARY KEY (id)
);

CREATE TABLE Player (
    Id int  NOT NULL,
    Name varchar(30)  NOT NULL,
    Surname varchar(30)  NOT NULL,
    Team_Name varchar(20)  NOT NULL,
    CONSTRAINT Player_pk PRIMARY KEY (id)
);


ALTER TABLE Player ADD CONSTRAINT DZ
    FOREIGN KEY (Team_Name)
    REFERENCES Team (Team_Name)  
;


ALTER TABLE Game ADD CONSTRAINT MD
    FOREIGN KEY (Team1, Team2)
    REFERENCES Team (Team_Name, Team_Name)  
;


ALTER TABLE Mecz ADD CONSTRAINT MZ
    FOREIGN KEY (D1_Player1, D1_Player2, D1_Player3, D1_Player4, D1_zPlayer5, D1_Player6, D2_Player1, D2_Player2, D2_Player3, D2_Player4, D2_Player5, D2_Player6)
    REFERENCES Player (id, id, id, id, id, id, id, id, id, id, id, id)  
;

【问题讨论】:

  • 请编辑您的问题,以便为您使用的 SQL 形式添加标签,即MySQLSQL-Server 等。

标签: sql


【解决方案1】:

你应该一一添加所有外键。

ALTER TABLE Game  ADD CONSTRAINT MZ
    FOREIGN KEY (D1_Player1)
    REFERENCES Player (id)  
;

ALTER TABLE Game  ADD CONSTRAINT MZ2
    FOREIGN KEY (D1_Player2)
    REFERENCES Player (id)  
;

ALTER TABLE Game  ADD CONSTRAINT MZ3
    FOREIGN KEY (D1_Player3)
    REFERENCES Player (id)  
;

GO

dbfiddle here

【讨论】:

  • 谢谢你让我开心!知道它就像一个魅力。为了更好地理解它,我没有工作,因为 Foreign Key(Player1,...Player6) 实际上只想创建一个具有多个相同列而不是几个外键的外键?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
相关资源
最近更新 更多