HAPUS CASCADE di MSSQL Server hanya dapat mengalir ke satu tabel. Jika Anda memiliki dua tabel dengan hubungan kunci asing ke tabel dimensi, Anda hanya dapat menghapus secara berjenjang ke salah satunya. (Ini untuk mencegah penghapusan yang mengalir melalui banyak jalur dan menciptakan konflik, seperti halnya C++ mengizinkan pewarisan berganda tetapi C# hanya mengizinkan pewarisan tunggal)
Jika ini masalahnya, Anda terpaksa menggunakan pemicu atau secara khusus menangani kasus dalam kode Anda.
Untuk alasan ini saya telah melihat banyak orang memilih untuk menggunakan pemicu dalam semua kasus. Bahkan ketika hanya ada satu meja asing. Ini memastikan konsistensi sehingga orang tahu apa yang harus dicari saat memelihara database.
Jika seseorang dapat menghapus penghapusan ke lebih dari satu tabel, saya akan mengatakan itu akan menjadi opsi yang paling disukai. Keterbatasan ini, bagaimanapun, memperkeruh air dan saat ini saya lebih menyukai pemicu yang memiliki semua perilaku seperti itu. Overhead dalam menggunakan pemicu untuk penghapusan dan pembaruan berjenjang hanya kecil dalam hal pengkodean, tetapi memungkinkan praktik standar yang benar-benar umum.
EDIT:
Anda mungkin ingin memindahkan 'jawaban yang diterima' ke orang lain, ternyata saya salah dengan hal di atas.
Anda BISA memiliki beberapa tabel fakta yang memiliki ON DELETE CASCADE Foreign Key Contraints ke tabel Dimensi signle.
Yang tidak dapat Anda lakukan adalah memiliki satu Tabel Fakta yang memiliki ON DELETE CASCADE Batasan Kunci Asing ke beberapa Tabel Dimensi.
Jadi misalnya...
- Tabel Dimensi [Orang] (id INT IDENTITY, )
- Tabel Dimensi [Ujian] (id INT IDENTITY, )
- Tabel Wajah [Ujian_Skor] (person_id INT, ujian_id INT, skor INT)
Jika Orang atau Ujian dihapus, Anda ingin catatan Exam_Score terkait juga dihapus.
Ini tidak mungkin menggunakan ON DELETE CASCADE di MS SQL Server, sehingga perlu adanya pemicu.
(Permintaan maaf kepada Mehrdad yang mencoba menjelaskan ini kepada saya, tetapi saya benar-benar melewatkan maksudnya.)