Wenn ich zwei Beziehungen in einer Datenbank habe, wie folgt:
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
);
und ich stelle eine Fremdschlüsselbeziehung zwischen den beiden her, wie folgt:
ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;
Dann können Sie sehen, dass das Course
Attribut in der BookCourses
Beziehung auf das Code
Attribut in der Courses
Beziehung verweist .
Meine Frage ist, wann eine Löschung in einer der beiden Beziehungen auftritt. Auf welche Weise kaskadiert die Löschung? Wenn ich ein Tupel in der Courses
Beziehung lösche, werden dann alle referenzierenden Tupel in der BookCourses
Beziehung gelöscht , oder ist es umgekehrt?
Categories
Tabelle einenCourseID
als Primärschlüssel hat, während dieCourses
Tabelle den hatEntryID
. Sie müssen Ihre Namensentscheidungen ernsthaft überdenken.Antworten:
Cascade funktioniert, wenn Sie etwas in der Tabelle löschen
Courses
. Jeder Datensatz in einer TabelleBookCourses
, der auf eine Tabelle verweist,Courses
wird automatisch gelöscht.Wenn Sie jedoch versuchen, eine Tabelle zu löschen, ist
BookCourses
nur die Tabelle selbst betroffen und nicht dieCourses
Anschlussfrage: Warum haben Sie
CourseID
auf Tabelle Kategorie?Vielleicht sollten Sie Ihr Schema in dieses umstrukturieren,
quelle
Hier ist ein einfaches Beispiel für andere, die diesen alten Beitrag besuchen, aber das Beispiel in der Frage verwirrt:
Lieferung -> Paket (Eins -> Viele)
Der Eintrag mit dem Fremdschlüssel Delivery_Id (Package) wird mit der referenzierten Entität in der FK-Beziehung (Delivery) gelöscht.
Wenn also eine Lieferung gelöscht wird, werden auch die Pakete, auf die verwiesen wird, gelöscht. Wenn ein Paket gelöscht wird, passiert nichts mit Lieferungen.
quelle