Apa tujuan dari SET NULL dalam batasan Hapus / Perbarui Kunci Asing?


15

Saya mungkin berpikiran sempit, tetapi jika saya membuat batasan kunci asing dan baris diperbarui atau dihapus, saya kehilangan koneksi itu jika kolom tabel anak diatur ke NULL.

Apa tujuan menjaga barisan yatim ini dengan sengaja?


Saya sedang mencari use case, dan saya tidak berpikir itu adalah database khusus (mungkin salah di sini)
Derek Downey

Saya belum pernah melihat kasus penggunaan untuk ini ...
a_horse_with_no_name

Jawaban:


13

Apakah set nullberguna atau tidak tergantung pada apa yang Anda pilih nulluntuk maksud dalam konteks tertentu - dengan semua kebingungan dan pendapat tentang nullIMO pendekatan yang masuk akal adalah untuk DBA untuk

  1. Pilih (dan dokumentasikan) apa artinya untuk setiap bidang yang dapat dibatalkan
  2. Pastikan itu berarti satu hal saja

Dengan aturan itu, pertimbangkan kasus penggunaan berikut:

  • Anda memiliki 'toko' meja (mis. Tempat individu)
  • Anda memiliki 'pengecer' meja (mis. Rantai)
  • Tabel 'toko' memiliki bidang pencarian yang mengacu pada kunci 'pengecer'
  • Anda telah mendefinisikan nulluntuk mewakili toko independen (yaitu toko yang bukan bagian dari rantai)
  • Seorang 'pengecer' menutup cabang sampai-sampai Anda menganggap toko-tokonya independen

Dalam hal ini, suatu yang on delete set nullmasuk akal. Ada cara lain untuk memodelkan aturan bisnis ini, tetapi ini adalah yang paling sederhana dan jika itu secara akurat sesuai dengan fakta yang Anda pedulikan di dunia nyata, saya sarankan itu sangat oke


Poin bagus dengan arti nol, dan dengan contoh Anda jelas mengapa ini adalah fitur.
Derek Downey

1

Sebagian besar kasus penggunaan yang dapat saya pikirkan umumnya adalah dalam bentuk "Yah, kita bisa melakukan sesuatu yang berbeda tetapi kami merasa ingin melakukan ini sebagai gantinya".

Pertimbangkan ownerbidang bug di sistem pelacakan masalah di perusahaan. Jika John berhenti, pasti semua masalahnya tidak boleh hanya dihapus ketika akunnya dihapus. Meski begitu, beberapa database memungkinkan SET DEFAULTsebagai tindakan (atau memiliki pemicu melakukan tugas yang sama), dan menjadikan Nobodykaryawan sebagai pemilik default masalah dapat menjadi pilihan. Atau kita bisa memiliki disabledbidang untuk John daripada menghapus catatannya.


3
Dalam hal ini saya akan berdebat untuk tidak mengizinkan penghapusan ( RESTRICT), jika tidak ada alasan lain untuk menunjukkan kesalahan kepada karyawan lama ketika ada yang salah dengan itu!
Derek Downey
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.