【问题标题】:Foreign key- SQL developer外键 - SQL 开发人员
【发布时间】:2016-07-19 02:31:50
【问题描述】:

所以我遇到的问题是我的表中的外键,当我在没有外键的情况下运行时会创建表。错误即时贴在底部,只是尝试熟悉SQL。

CREATE TABLE Player
(
Player_ID VARCHAR(20) NOT NULL,
Fname VARCHAR(15),
Sname VARCHAR(15),
DOB    NUMBER(3),
Height NUMBER(3),
Weight NUMBER(3),
Position VARCHAR(15),
Team_ID VARCHAR(20) NOT NULL,

CONSTRAINT Player_primary_key PRIMARY KEY (Player_ID),
CONSTRAINT Player_foreign_key FOREIGN KEY(Team_ID) REFERENCES TEAM(Team_ID)
);


CREATE TABLE Team
(
Team_ID VARCHAR(20) NOT NULL,
Tname VARCHAR(20),
Tlocation VARCHAR(20),
Coach VARCHAR(20),
Gameswon NUMBER(10),
Gameslost NUMBER (10),

CONSTRAINT Team_primary_key PRIMARY KEY (Team_ID)
);


CREATE TABLE Match
(
Match_ID VARCHAR(20) NOT NULL,
Hometeam VARCHAR(20), 
Awayteam VARCHAR(20), 
Score NUMBER (10),
Mdate NUMBER(10),
Mtime NUMBER(10),

CONSTRAINT Match_primary_key PRIMARY KEY (Match_ID),
CONSTRAINT Match_foreign_keyHome FOREIGN KEY (Team_ID) REFERENCES HOST(Team_ID),
CONSTRAINT Match_foreign_keyAway FOREIGN KEY (Team_ID) REFERENCES TEAM(Team_ID)
);

CREATE TABLE HOST
(
Team_ID VARCHAR(20) NOT NULL,
Match_ID VARCHAR(20) NOT NULL,

CONSTRAINT Host_Foriegn_Key_Team FOREIGN KEY (Team_ID) REFERENCES TEAM(Team_ID),
CONSTRAINT Host_Foriegn_Key_Match FOREIGN KEY (Match_ID) REFERENCES MATCH(Match_ID)
);

【问题讨论】:

    标签: sql foreign-keys


    【解决方案1】:

    您的第一个错误似乎与您尚未定义 Team 表有关。由于您正在使用:

    CONSTRAINT Player_foreign_key FOREIGN KEY(Team_ID) REFERENCES TEAM(Team_ID)
    

    对于 Match 表,您正在使用 Team_ID 创建一个外键,即使它在您的表中不存在。这就是它抛出错误的原因:

    CONSTRAINT Match_foreign_keyAway FOREIGN KEY (Team_ID) REFERENCES TEAM(Team_ID)
    

    对于您的最后一个错误,MATCH 实际上是一个 SQL 命令,这就是为什么当您将其作为代码示例时它会变成蓝色的原因。我在想这就是为什么它正在寻找一个表名但假设你没有提供一个。这只是我对最后一个错误的猜测。

    1) 所以我会先创建你的 Team 表,而不是先创建 Player。
    2)然后我可能会将 Match_foreign_keyHome 的 Team_ID 更改为 Hometeam:

    CONSTRAINT Match_foreign_keyHome FOREIGN KEY (Hometeam) REFERENCES HOST(Team_ID),
    

    然后我会将 Match_foreign_keyAway 的 Team_ID 更改为 Awayteam:

    CONSTRAINT Match_foreign_keyHome FOREIGN KEY (Awayteam) REFERENCES HOST(Team_ID),
    

    【讨论】:

    • 非常感谢,你指出的 match 犯了一些愚蠢的错误,非常新,所以再次感谢,也很抱歉下次布局会格式化。
    • 创建的表很好,明天将使用数据进行测试以检查其是否正常工作。
    • 所以您能够毫无问题地创建所有表?听起来还不错。您是否重命名了匹配表或如何解决您遇到的问题?
    • 我将比赛改为比赛,但有一件事让我摸不着头脑,所以当比赛发生时,有一个客队主队(在那儿)和客队,我应该把钥匙设为数字还是VARCHAR?
    • 使用整数作为键总是更好,因为它们不能包含空格。当您使用 VARCHAR 时,可能会在您的键中出现空白,这可能会造成很多挫败感:See example。您已经将 TName 中的团队名称作为 VARCHAR 来使用,因此只需使用提取 TName 而不是仅显示 Team_ID 的选择很容易。然后,当您插入比赛时,您可以为主场和客场输入正确的 Team_ID。
    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2022-07-19
    相关资源
    最近更新 更多