Veritabanında neden kısıtlama uygulanıyor? Kodu koya koymak daha esnek olmayacak mı?
Veritabanlarının uygulanması hakkında yeni başlayanlar kitabı okuyorum, bu yüzden bunu yeni başlayan olarak soruyorum. Diyelim ki bu varlık modeli de dahil olmak üzere bir veritabanı tasarladım:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
Mevcut kısıtlamalar:
- Sisteme kayıtlı bir kişi yalnızca Öğrenci veya Çalışan olabilir.
- Kişi varlığı, her bireyin sadece tek bir benzersiz (yani yeterince iyi bir birincil anahtar) olduğunu düşündüğümüz sosyal sayının benzersizliğini gerektirir . (bkz. # 1)
Daha sonra 1 sayısını kaldırmaya karar veririz: Bir gün kolej Teacher
( Employee
alt türün) de Student
boş zamanlarında ders alarak olabileceğine karar verirse, binlerce, milyonlarca, milyarlarca dolarlık veritabanı tasarımını değiştirmek çok daha zordur, sadece koddaki mantığı değiştirmek yerine milyonlarca giriş: sadece bir kişinin hem öğrenci hem de çalışan olarak kaydedilmesine izin vermeyen kısım.
(Çok imkansız ama şu anda başka bir şey düşünemiyorum. Görünüşe göre mümkün).
Neden koddan ziyade veritabanı tasarımında iş kurallarını önemsiyoruz ?
# 1: 7 yıl sonra bir not, gerçek hayattan bir örnek:
Bir hükümetin, bir hata nedeniyle, yayınlanan SSN'lerin çoğaltıldığı bir hükümet gördüm: birden fazla kişi, aynı SSN. Orijinal DB tasarlayanlar kesinlikle bu teklik kısıtlamasını veritabanında uygulamayan hata yaptılar. (ve daha sonra orijinal uygulamada bir hata? Paylaşılan veritabanını kullanan ve kısıtlamayı nereye koyacağınızı, kontrol edip uygulayacağınızı kabul etmeyen birden fazla uygulama? ...).
Bu hata sistemde ve tüm sistemde yaşamaya devam edecek ve bundan sonra uzun yıllar boyunca orijinal sistemin veritabanına güvenecek. Buradaki cevapları okuduğumda, mümkün olan en iyi fiziksel dünyayı temsil etmek için veritabanındaki tüm kısıtlamaları, mümkün olduğunca çoğunu, akıllıca (kör değil) uygulamayı öğrendim.