Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kaskade pada Hapus atau gunakan Pemicu?

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.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana MENGUBAH Parameter Nilai Tabel

  2. Kesalahan SQL Server - HRESULT E_FAIL telah dikembalikan dari panggilan ke komponen COM

  3. Saat menggunakan GETDATE() di banyak tempat, apakah lebih baik menggunakan variabel?

  4. Ubah 'smalldatetime' menjadi 'datetimeoffset' di SQL Server (Contoh T-SQL)

  5. Cara menyalin data tabel besar ke tabel lain di SQL Server