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

时间:2019-03-22 23:00:51

标签: sql sql-server foreign-keys

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

我需要创建一个包含2个表的新表,但是创建表Classes_Teachers时出现错误。

  

在引用的表“类”中没有与外键“ FK__Classes_T__Class__11007AA7”中的引用列列表匹配的主键或候选键。

这是我的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)
);

2 个答案:

答案 0 :(得分:3)

该错误来自表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)
);

Demo on DB Fiddle

答案 1 :(得分:0)

在表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)
);