簡體   English   中英

單表中的SQL雙外鍵

[英]SQL double foreign key in single table

我是sql初學者。 我正在創建一個數據庫來跟蹤學生在學校的入學情況。

我使用以下方法創建了學生,學校和班級的前3個表(DB必須跟蹤學生所在的班級):

CREATE TABLE Students (
        studId int NOT NULL AUTO_INCREMENT primary key,
        name varchar(20),
        surname varchar(20),
        birthDate date,
        birthPlace varchar(40)
    );

CREATE TABLE Schools (
    schId varchar(20) NOT NULL primary key,
    name varchar(50),
    province char(2),
    region varchar(20)
);

CREATE TABLE Classes (
    classId int NOT NULL AUTO_INCREMENT,
    schId varchar(20),
    FOREIGN KEY (schId) REFERENCES Schools(schId),
    PRIMARY KEY (classId, schId),
    name varchar(5),
    course varchar(20),
    option varchar(20)
);

現在,我需要一個Enroll表,但這會導致錯誤:

CREATE TABLE Enrolls(
    studId int,
    schId varchar(20),
    classId varchar(20),
    FOREIGN KEY (schId) REFERENCES Schools(schId),
    FOREIGN KEY (studId) REFERENCES Students(studId),
    FOREIGN KEY (classId) REFERENCES Classes(classId),
    PRIMARY KEY(studId, schId, classId)
);

我想是因為classId是Classes表中帶有schId的主鍵。

我該如何解決?

錯誤1005(HY000):無法創建表studentsdb.enrolls(錯誤號:150“外鍵約束格式不正確”)

Classes.classId是一個整數,而Enrolls.classId是一個varchar。

我希望能解決錯誤

classIDEnrolls的類型為varchar(20)和表Classes的類型為int

確保它們具有相同的類型。 錯誤會消失!

請嘗試運行以下代碼

嘗試在sqlfiddle上成功運行。 更改已標記。

Sqlfiddle鏈接- http://sqlfiddle.com/#!9/f7dd7/1/0

CREATE TABLE Students (
        studId int NOT NULL AUTO_INCREMENT primary key,
        name varchar(20),
        surname varchar(20),
        birthDate date,
        birthPlace varchar(40)
    );

CREATE TABLE Schools (
    schId varchar(20) NOT NULL primary key,
    name varchar(50),
    province char(2),
    region varchar(20)
);

CREATE TABLE Classes (
    classId int NOT NULL AUTO_INCREMENT,
    schId varchar(20),
    name varchar(5),
    course varchar(20),
    option_a varchar(20), -- not accepting column name "option"
  FOREIGN KEY (schId) REFERENCES Schools(schId),
  PRIMARY KEY (classId, schId)
);


CREATE TABLE Enrolls(
    studId int, --changed data type to int i think due to which issue was coming also suggested in other answers.
    schId varchar(20),
    classId int,
    FOREIGN KEY (schId) REFERENCES Schools(schId),
    FOREIGN KEY (studId) REFERENCES Students(studId),
    FOREIGN KEY (classId) REFERENCES Classes(classId),
    PRIMARY KEY(studId, schId, classId)
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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