Çok sunuculu RDBMS'im veya Uygulamam veritabanı Referans Bütünlüğü'nü işlemeli mi?


16

Yabancı Anahtarlar, Kısıtlamalar, Varsayılan Değerler vb. Öğeler veritabanı yönetim sistemi (bu örnekte MS SQL 2005) veya uygulama tarafından mı ele alınmalıdır? Her iki taraftan da fikirler duydum ve dürüstçe hangi yoldan gideceğimden emin değilim.

Birden fazla sunucuya / veritabanına yayılma şansımız var ve Yabancı Anahtarların bağlı sunucular arasında kullanılabileceğini düşünmüyorum. Buna ek olarak, veritabanı tasarımında ON UPDATE CASCADEher şeyi kullanmamı engelleyen bazı dairesel referanslar var .

Veritabanı MS SQL 2005 (muhtemelen 2008) ve onunla tüm etkileşimleri uygulama geçmesi gerekir.


3
RDBMS kullanmadığınızı hayal edemediğim için burada öğrenecek bir şeyim var.
bigtang

Yanıtlar:


10

DB'nin uygulamanızın dışında değiştirilme şansı varsa, veritabanındaki kısıtlamaları istersiniz. DB ise ve her zaman uygulamanın arka ucundan başka bir şey olmayacaksa, bunları dışarıda bırakabilirsiniz, ancak her ihtimale karşı onları belgeleyebilirim ve muhtemelen performans isabeti çok kötü değilse onları saklayabilirsiniz. (Peoplesoft yazılımı bu şekilde çalışır - kısıtlamalar yazılımdadır ve (bunu telafi etmiyorum) her şeyi Oracle'da SYS olarak çalıştırır.)

Bunun gibi şeylerin uygulama tarafından izlenmesini istersiniz, böylece kullanıcıya en iyi şekilde bir veritabanı hata mesajını geri döndürmek için akıllıca tepki veremez.

Ve evet, bu çift kapsama alanı, ancak onsuz önlenebilir veri bozulması veya kötü bir kullanıcı arayüzü elde edeceksiniz.


5

İdeal olarak, her ikisi de. Sen olmamalıdır değil uygulama app başvuru bütünlüğü korumaya adanmış en azından bazı kodu olmalıdır böylece DB, bir çalışma zamanı hatası olduğunu reddedecektir bu verilerle kadar gelirse, o zaman tekrar DB ele var, ama. Ayrıca, DB'de SQL'de doğru kısıtlamaları ayarlamak, istemci tarafı için kod ayarlamaktan çok daha basittir, bu yüzden DB'de yapmak, yapmanız gereken iş miktarını büyük ölçüde azaltır.


1

Eğer önemliyse, veritabanının işlemesine izin verin. Bu şekilde, birisinin uygulamanızın dışındaki veritabanına erişmesi ve tutarsız veya yinelenen bazı verileri değiştirmesi veya girmesi konusunda endişelenmenize gerek yoktur. Bazı yüksek seviyeli uygulamaya özgü şeyler olmadığı sürece ("yalnızca X bölümündeki ZZZ erişim sınıfına sahip kullanıcıların grup 999'a ait olmasına izin verilmelidir"), ancak bu genellikle "referans" bütünlük olarak adlandırılmaz.


1

Veritabanına koy diyebilirim. Kalıcı bir çerçeve kullanıyorsanız, tuşları otomatik olarak alır.


1

Her ikisi de kesinlikle yoludur. Hatalı güncellemeleri ve eklemeleri önlemek ve kullanıcılara neyin yanlış olduğunu ve nasıl düzeltileceğini söylemek için kodunuzda doğrulama mantığı isteyeceksiniz. Ve orada şeyleri durdurmak için veritabanı olması, böylece bir şey geldi ve doğrulama yoluyla çalışmadıysa, satırdan aşağı şeyler kırmak olmaz iyi bir şeydir.

Veritabanı şeylerini daha üst düzeyde tutmalısınız. EG, referans bütünlüğünü zorunlu kıl ve belki bazıları null değil. Ancak, uzunlukları veya formatları sınırlama konusunda endişelenmeyin, çünkü bu en iyi şekilde uygulamaya dönüştürülür.

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.