Проблемы при создании таблицы, ссылающейся на другие с FK - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь создать базу данных для проекта, который работает как школа с некоторыми учителями, курсами, классами и т. Д.

Мне нужно создать новую таблицу, включающую 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 ]

3 голосов
/ 23 марта 2019

Ошибка происходит от внешних ключей, объявленных в таблице Classes_Teacher. Чтобы иметь отношение к таблице Classes, вы хотите использовать оба первичных столбца упомянутых таблиц вместо двух разделенных внешних ключей.

Рассмотрим:

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 Fiddle .

0 голосов
/ 23 марта 2019

В таблице 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)
);
...