Sanırım veritabanı tarafından uygulanan yabancı anahtar kısıtlamalarından bahsediyorsunuz . Muhtemelen zaten yabancı anahtarlar kullanıyorsunuz, sadece veritabanına bundan bahsetmediniz.
Bir programcının bunu zaten doğru şekilde yaptığını varsayalım, o zaman gerçekten yabancı anahtar kavramına ihtiyacımız var mı?
Teorik olarak hayır. Ancak, hiçbir zaman hatasız bir yazılım parçası olmadı.
Uygulama kodundaki hatalar genellikle o kadar tehlikeli değildir - hatayı tanımlar ve düzeltirsiniz ve bundan sonra uygulama tekrar sorunsuz çalışır. Ancak bir hata mevcut verilerin veritabanına girmesine izin veriyorsa, o zaman ona takılıp kalırsınız! Veritabanındaki bozuk verilerden kurtarmak çok zordur.
FogBugz'daki küçük bir hatanın , veritabanına bozuk bir yabancı anahtarın yazılmasına izin verip vermediğini düşünün . Bir hata düzeltme sürümünde hatayı düzeltmek ve düzeltmeyi hızla müşterilere göndermek kolay olabilir. Ancak düzinelerce veritabanındaki bozuk veriler nasıl düzeltilmelidir? Doğru kod artık aniden bozulabilir çünkü yabancı anahtarların bütünlüğü hakkındaki varsayımlar artık geçerli değildir.
Web uygulamalarında genellikle veri tabanına konuşan yalnızca bir programınız vardır, bu nedenle hataların verileri bozabileceği tek bir yer vardır. Kurumsal bir uygulamada, aynı veritabanına konuşan birkaç bağımsız uygulama olabilir (doğrudan veritabanı kabuğuyla çalışan kişilerden bahsetmeye gerek yok). Tüm uygulamaların her zaman ve sonsuza kadar hatasız aynı varsayımları takip ettiğinden emin olmanın bir yolu yoktur.
Veritabanında kısıtlamalar kodlanmışsa, hatalarla karşılaşılabilecek en kötü şey, kullanıcıya bazı SQL kısıtlamalarının karşılanmadığı hakkında çirkin bir hata mesajı gösterilmesidir . Bu, tüm uygulamalarınızı bozacağı veya her türlü yanlış veya yanıltıcı çıktıya yol açacağı kurumsal veritabanınıza güncel verilerin girmesine izin vermek için çok tercih edilir.
Oh, ve yabancı anahtar kısıtlamaları da varsayılan olarak indekslendikleri için performansı artırır. Ben herhangi bir nedenle düşünemiyorum değil yabancı anahtar kısıtlamalarını kullanmak.