创建用FK引用其他表的表格时的问题



我正在尝试为一个像学校一样,有一些老师,课程,课程等的项目创建一个数据库。

我需要创建一个涉及2个表的新表格,但是在创建表Classes_Teachers时我会遇到错误

参考表的"类"中没有主键或候选键,与外键'fk__classes_t__class _11007Aa7a'中的参考列列表匹配。

这是我的SQL代码:

CREATE TABLE Teachers(
    id INT,
    name varchar(40),
    email varchar(30) FOREIGN KEY REFERENCES Users(email),
    PRIMARY KEY(id)
);
CREATE TABLE Courses(
    name varchar(20),
    acr varchar(4),
    teacher int FOREIGN KEY REFERENCES Teachers(id),
    PRIMARY KEY(acr)
);
CREATE TABLE Classes(
    id varchar(2),
    courses_acronym varchar(4) FOREIGN KEY REFERENCES Courses(acr),
    year_Semesters varchar(5),
    PRIMARY KEY(id,courses_acronym),
);
CREATE TABLE Classes_Teacher(
    Classes_id varchar(2) FOREIGN KEY REFERENCES Classes(id),
    Teachers_id INT FOREIGN KEY REFERENCES Teachers(id),
    courses_acronym varchar(4) FOREIGN KEY REFERENCES Classes(courses_acronym),
    PRIMARY KEY(Classes_id,courses_acronym)
);

错误来自表Classes_Teacher中声明的外键。要与Classes表相关联,您要使用引用表的两个主要列,而不是twn分离的外键。

考虑:

CREATE TABLE Classes_Teacher(
    Classes_id varchar(2),
    Teachers_id INT FOREIGN KEY REFERENCES Teachers(id),
    courses_acronym varchar(4),
    FOREIGN KEY (Classes_id, courses_acronym) REFERENCES Classes(id, courses_acronym),
    PRIMARY KEY(Classes_id,courses_acronym)
);

DB小提琴上的演示

在表Classes中,您在两个列上定义了一个主键。如果courses_acronym取决于ID,则可能不需要。

CREATE TABLE Classes(
    id varchar(2),
    courses_acronym varchar(4) FOREIGN KEY REFERENCES Courses(acr),
    year_Semesters varchar(5),
    PRIMARY KEY(id),
);

在表Classes_Teacher中,您将Classes参考两次。第二个外键不应该参考 Courses

CREATE TABLE Classes_Teacher(
    Classes_id varchar(2) FOREIGN KEY REFERENCES Classes(id),
    Teachers_id INT FOREIGN KEY REFERENCES Teachers(id),
    courses_acronym varchar(4) FOREIGN KEY REFERENCES Courses(acr),
    PRIMARY KEY(Classes_id,courses_acronym)
);

最新更新