Açıkçası CONSTRAINT
bir veritabanındaki bu veritabanına erişen uygulamalar tarafından uygulanmasını öneriyoruz ?
Bunun kötü (kötü, kötü ...) bir fikir olmasının birçok nedeni vardır .
1) Eğer bir "kendi rulo" kısıtlaması "motoru (örneğin uygulama kodunuzda) oluşturuyorsanız, Oracle / SQL Server / MySQL / PostgreSQL / <. yıl yazma. CONSTRAINT kodları tam anlamıyla milyonlarca son kullanıcı tarafından test edildi .
2) Size ve ekibinize gereken tüm saygıyla, birkaç yıl içinde bile doğru elde edemezsiniz - buradan yalnızca MySQL kodu 40 Milyon dolara mal olur. Ve MySQL yukarıdaki 3 sunucunun en ucuzudur ve CHECK CONSTRAINT'leri bile uygulamamaktadır. Açıkçası, RI'yi (Referans Bütünlüğü) tamamen doğru yapmak zordur.
Oracle forumlarını sık sık yapıyordum ve bazı fakir yöneticilerin / programcıların, daha önce işini yapan dahi, önerisini yapmanın "parlak" fikrine sahip olduğu bir projeye ne kadar sürdüğünü söyleyemem. .
Jonathan Lewis ( Oracle optimiser'ın temelleri üzerine 550 sayfalık bir kitap yazdı ) hayır veriyor. Tasarım Felaketlerinden 2'si başka bir kitapta (" Meşe Masasının Masalları ") " - Meşe Masalı bir Oracle uzmanları grubudur)
- Oracle'ın kısıt kontrolü yeteneklerinden yararlanmak yerine veri bütünlüğünü uygulama düzeyinde kontrol edeceğiz.
3) Bir mucize olsa bile düzgün RI uygulayabilir, bunu yapmak zorunda olacak tamamen veriler önemlidir ve eğer o zaman yeni uygulamalar olacak - o dokunuşlar veritabanında her uygulama için bunu tekrar tekrar reimplement. Bunu bir paradigma olarak seçmek, sizin ve diğer programcılarınızın (destek personeli ve satıştan bahsetmemek) sürekli bir yangınla mücadele ve sefalet yaşamına yol açacaktır.
Verileri uygulama düzeylerinde uygulamanın CONSTRAINT'lerin neden burada , burada ve burada edinebilirsiniz .
Sorunuzu özellikle cevaplamak için:
Sadece neden ilan edildi? Çok yararlı görünüyor, ancak aslında çalışan bir veritabanına sahip olmak gerekli mi?
Nedeni KEY
ler (ya PRIMARY
, FOREIGN
, UNIQUE
ya da sadece sıradan INDEX
öyle ise es) ilan edilir, yani kesinlikle değil o işlev için bir veri tabanı onlara sahip olmak için gerekli olduğunu, kesinlikle onlara işleve bunun için beyan edilmesi için gerekli iyi .