Если у меня есть два отношения в базе данных, например:
CREATE TABLE Courses (
CourseID int NOT NULL PRIMARY KEY,
Course VARCHAR(63) NOT NULL UNIQUE,
Code CHAR(4) NOT NULL UNIQUE
);
CREATE TABLE BookCourses (
EntryID int NOT NULL PRIMARY KEY,
BookID int NOT NULL,
Course CHAR(4) NOT NULL,
CourseNum CHAR(3) NOT NULL,
CourseSec CHAR(1) NOT NULL
);
и я устанавливаю отношения между внешними ключами, как это:
ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;
Затем вы можете увидеть, что Course
атрибут в BookCourses
отношении ссылается на Code
атрибут в Courses
отношении.
Мой вопрос: когда удаление происходит в одном из двух отношений, каким образом происходит каскад удаления? Если я удаляю кортеж в Courses
отношении, удалит ли он все ссылающиеся кортежи в BookCourses
отношении, или это наоборот?
Categories
таблицы естьCourseID
первичный ключ, а уCourses
таблицы -EntryID
. Вы серьезно должны пересмотреть свой выбор имен.Ответы:
Каскад будет работать, когда вы удалите что-то на столе
Courses
. Любая запись в таблице,BookCourses
которая имеет ссылку на таблицу,Courses
будет автоматически удалена.Но когда вы пытаетесь удалить
BookCourses
таблицу, это влияет только на саму таблицу, а не наCourses
дополнительный вопрос: почему у вас
CourseID
на столе категория?Может быть, вы должны реструктурировать свою схему в этом,
источник
Вот простой пример для других, посещающих этот старый пост, но он смущен примером в вопросе:
Доставка -> Пакет (Один -> Много)
Запись с внешним ключом Delivery_Id (Package) удаляется со ссылкой на объект в отношении FK (Delivery).
Таким образом, при удалении доставки пакеты, ссылающиеся на него, также будут удалены. Если пакет удален, с доставкой ничего не происходит.
источник