Не удалось добавить ограничение внешнего ключа.Отсутствует индекс для ограничения Код ошибки: 1822 - PullRequest
0 голосов
/ 24 сентября 2018

Итак, я пытаюсь создать таблицу «Prerequisite_to», которая в основном представляет собой отношение, показывающее, какие классы считаются предварительным условием для определенного класса.Вот мои дефекты таблиц SQL:

CREATE TABLE Class(
infs CHAR(4) NOT NULL,
course_number CHAR(3) NOT NULL,
PRIMARY KEY (infs,course_number));

CREATE TABLE Prerequisite_to(
    infs CHAR(4),
    course_number CHAR(3),
    PRIMARY KEY (infs,course_number),
    FOREIGN KEY (infs) REFERENCES Class(infs),
    FOREIGN KEY (course_number) REFERENCES Class(course_number)
)

Однако, когда я выполняю скрипт, я получаю эту ошибку:

17: 29: 43 CREATE TABLE Prerequisite_to (infs CHAR (4), course_number CHAR (3), PRIMARY KEY (infs, course_number), FOREIGN KEY (infs) REFERENCES Class (infs), FOREIGN KEY (course_number) REFERENCES Class (course_number)) Код ошибки: 1822. Не удалось добавить ограничение внешнего ключа,Отсутствует индекс для ограничения «prerequisite_to_ibfk_2» в ссылочной таблице «Класс» 0,00038 сек

1 Ответ

0 голосов
/ 24 сентября 2018

У вас есть составной первичный ключ, поэтому вам нужен составной внешний ключ:

CREATE TABLE Prerequisite_to(
    infs CHAR(4),
    course_number CHAR(3),
    PRIMARY KEY (infs,course_number),
    FOREIGN KEY (infs, course_number) REFERENCES Class(infs, course_number)
);

Просто для записи, я не фанат составных первичных ключей.Я также думаю, что для предварительных условий необходимы две ссылки на курсы.Итак:

CREATE TABLE Classes (
    class_id int auto_increment primary key,
    infs CHAR(4) NOT NULL,
    course_number CHAR(3) NOT NULL,
    unique (infs, course_number)
);

CREATE TABLE Prerequisites (
    preresequisite_id int auto_increment primary key,
    class_id int,
    prerequisite_class_id int,
    FOREIGN KEY (class_id) REFERENCES Classes(class_id),
    FOREIGN KEY (prerequisite_class_id) REFERENCES Classes(class_id)
);
...