Yabancı Anahtarları Silme / Güncelleme kısıtlamasında SET NULL'un amacı nedir?


15

Muhtemelen dar görüşlüyüm, ancak bir yabancı anahtar kısıtlaması yaratırsam ve bir satır güncellenir veya silinirse, alt tablonun sütunu NULL olarak ayarlanırsa bu bağlantıyı kaybederim.

Bu yetim satırları kasıtlı olarak tutmanın amacı nedir?


Kullanım senaryoları arıyorum ve veritabanına özgü olduklarını düşünmüyorum (burada yanlış olabilir)
Derek Downey

Ben de bunun için bir kullanım çantası görmedim ...
a_horse_with_no_name

Yanıtlar:


13

set nullYararlı olsun veya olmasın null, belirli bağlamda ne demek istediğinize bağlıdır - nullIMO çevresindeki tüm karışıklık ve görüşler ile mantıklı yaklaşım DBA'nın

  1. Her boş alan için ne anlama geldiğini seçin (ve belgeleyin)
  2. Bunun tek bir şey ifade ettiğinden emin olun

Bu kurallarla, aşağıdaki kullanım durumunu göz önünde bulundurun:

  • Bir masa 'dükkan' var (örneğin, bireysel binalar)
  • Bir tablonuz var 'perakendeci' (örneğin zincirler)
  • 'Dükkan' tablosunda 'perakendeci' anahtarını gösteren bir arama alanı var
  • nullBağımsız bir dükkanı (yani zincirin bir parçası olmayan) temsil etmeyi tanımladınız
  • Bir 'perakendeci' şubeleri, dükkanlarının bağımsız olduğunu düşündüğünüz noktaya kadar kapatır

Bu durumda, on delete set nullmantıklı. Bu iş kurallarını modellemenin başka yolları da vardır, ancak bu en basit olanıdır ve gerçek dünyada önemsediğiniz gerçeklere tam olarak uyuyorsa, mükemmel bir şekilde tamamlanmasını öneririm


Null'un katı anlamı olan iyi noktalar ve örneğinizle bunun neden bir özellik olduğu açıktır.
Derek Downey

1

Düşünebileceğim kullanım vakalarının çoğu genellikle "Farklı bir şey yapabiliriz ama bunun yerine bunu yapmak gibi hissettik" şeklindedir.

ownerBir şirketteki sorun izleme sistemindeki bir hata için bir alan düşünün . John istifa ederse, elbette tüm sorunları hesabı kaldırıldığında silinmemelidir. O zaman bile, bazı veritabanları SET DEFAULTbir eyleme izin verir (veya aynı görevi gerçekleştiren bir tetikleyiciye sahip olmak) ve bir Nobodyçalışanın sorunların varsayılan sahibi olması bir seçenek olabilir. Veya disabledkayıtlarını silmek yerine John için bir alanımız olabilir .


3
Bu durumda RESTRICT, başka bir nedenden ötürü suçu eski bir çalışana yönlendirmek için delme ( ) ' ye izin vermemeyi tartışırım !
Derek Downey
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.