Jika saya memiliki dua relasi dalam database, seperti ini:
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
);
dan saya membangun hubungan kunci asing antara keduanya, seperti ini:
ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;
Kemudian Anda dapat melihat bahwa Course
atribut dalam BookCourses
relasi merujuk Code
atribut dalam Courses
relasi.
Pertanyaan saya adalah kapan penghapusan terjadi di salah satu dari dua hubungan tersebut, ke arah mana penghapusan akan terjadi? Jika saya menghapus tuple dalam Courses
relasi, apakah ini akan menghapus semua tupel referensi dalam BookCourses
relasi, atau sebaliknya?
Categories
tabel memilikiCourseID
sebagai Kunci Utama sementaraCourses
tabel memilikiEntryID
. Anda serius perlu memikirkan kembali pilihan penamaan Anda.Jawaban:
Cascade akan berfungsi saat Anda menghapus sesuatu di atas meja
Courses
. Setiap catatan di atas mejaBookCourses
yang memiliki referensi ke tabelCourses
akan dihapus secara otomatis.Tetapi ketika Anda mencoba untuk menghapus di atas meja
BookCourses
hanya tabel itu sendiri yang terpengaruh dan bukan pada tabelCourses
pertanyaan tindak lanjut: mengapa Anda memiliki
CourseID
Kategori di atas meja?Mungkin Anda harus menyusun kembali skema Anda menjadi ini,
sumber
Berikut adalah contoh sederhana untuk orang lain yang mengunjungi pos lama ini, tetapi bingung dengan contoh dalam pertanyaan:
Pengiriman -> Paket (Satu -> Banyak)
Entri dengan kunci asing Delivery_Id (Paket) dihapus dengan entitas yang dirujuk dalam hubungan FK (Pengiriman).
Jadi, ketika Pengiriman dihapus, Paket yang merujuknya juga akan dihapus. Jika Paket dihapus, tidak ada yang terjadi pada pengiriman apa pun.
sumber