DRY ile ilişkisel veritabanı dünyasındaki problemlerden bahsetmek zorundayım. Veritabanları, küme tabanlı mantığı ve sorgulanabilir sorguları kullanarak hızlı ve iyi performans gösterecek şekilde tasarlanmıştır. KURU ilkeleri genellikle geliştiricinin Sargable olmayan sorgular yazmasına veya birden fazla durumda varolan kodu kullanmak için Satır Yankılanan Satır mantığını kullanmasına neden olur. NEMLENDİRME ve performans optimizasyonu sık sık olasılıklıdır ve veritabanı dünyasında, performans genellikle bakımdan daha kritiktir. Bu, DRY prensiplerini hiç kullanmamanız gerektiği anlamına gelmez, sadece veritabanının genel kullanılabilirliğini nasıl etkileyeceğini bilmeniz gerektiği anlamına gelmez. Uygulama geliştiricileri ilk önce DRY ve ikinci performans, veritabanı geliştiricileri ilk önce veri bütünlüğü, ikinci performans, üçüncü verilerin güvenliği (performans ve güvenlik bazı sistemlerde yer değiştirebilir).
Genel olarak, veritabanına koyduğunuz soyutlama katmanlarının ne kadar yavaş olduklarını sorguladığını fark ettim. Veri tabanı programlarını kendileri tasarlayan insanlara, geliştiricilerin veritabanının performansını iyi etkilemeden DRY kullanmalarına izin vermek için daha iyi bir iş yapmalarını istemedim demiyorum, ancak bu düzeyde veritabanı yazılımı tasarlamıyorum , belki de soyutlama ve veritabanındaki performans arasındaki çatışmayı sandığımdan daha zordur. Ancak, halihazırda yapıldıkları gibi sistemlerle çalışmak zorundayız. DRY ilkelerinin, aynı zamanda performansı düşürmeyecek (ve yıllar içinde daha iyi bir hale gelmiş ancak hala sorunlu) gelecek sürümlerde daha iyi uygulanmasını isteyebiliriz, ancak bu arada, DRY'nin bu veritabanı için doğru hareket olup olmadığını düşünmeliyiz. şu anda.
Ancak, KURU ilkesinin yerine getirilmesini sağlamak için kullanmak istediğiniz özellikler çoğu zaman veritabanı için büyük sorunlara yol açan özelliklerdir. Asla DRY kullanmam demiyorum ama onunla aşırıya kaçma.
Neden bahsettiğimden örnekler. Ayda bir kez bir milyon kaydın veri alımını yapmanız gerekir. Kayıtlar, önceden kaydedilmiş bir proc'u arayarak kullanıcı arayüzü üzerinden manuel olarak eklenebilir. Bu işlem, tek bir kayıt içe aktarma işlemi için tasarlandığından, her seferinde yalnızca bir kayıt ekler. Ek kodunu iki yerde bulundurmamak için DRY özelliğini kullanarak, ihtiyaç duyduğunuz set tabanlı içe aktarmaları yazmak yerine proc'u tekrar tekrar aramak için bir imleç yazabilirsiniz. İçe aktarma süresi, set tabanlı mantığı kullanarak alacağı 30 dakikadan 18 saate kadar sürer. Şimdi bu durumda DRY'ye bağlı kalmanın doğru yolu procun katıksız kayıt ithalatını işlemesi için düzeltilmesi olacaktır. Ne yazık ki, bir proke (db arka ucuna bağlı olarak) bir dizi göndermek genellikle imkansızdır veya çok zordur ve proc'u değiştirerek uygulamayı sonlandırırsınız.
DRY prensiplerini uygulamak için skaler fonksiyonlar ve tablo değerli fonksiyonlar da kullanılır ve yine de özellikle indekslerin faydalı olmasını önleyecek şekilde kullanmanız gerekirse performansı ciddi şekilde etkileyebilir.
Görüşler, DRY'yi uygulamak için de iyidir. Bununla birlikte, DRY'yi, başka görünümleri çağıran görünümleri çağıran görünümleri kullanarak uygularsanız, sorguların yük altında zaman aşımına uğrayacağı noktaya çabucak ulaşırsınız. Aslında, sonunda sadece üçe ihtiyaç duyduğunuzda milyonlarca kayıttan oluşan veri kümeleri oluşturmaya ihtiyaç duyabilirsiniz. Dolayısıyla, DRY'yi uygulamak için karmaşık bir birleştirme kümesinin tek düzey bir görünümü mükemmel olabilir (tüm finansal raporlamanın aynı temel tablo kümesini ve belirli şeylerin hesaplamalarını kullandığından emin olmak için kullandığımız bir tane var). ve bir performans karışıklığı yaratıp yaratmadığınızı düşünmeniz gerekir.