Birkaç yıl sonra, soru hala önemli ...
Benim için basit bir kural: mantıksal bir kısıtlama veya her yerde bulunan bir ifade (tek ifade) ise onu veritabanına yerleştirin (evet, yabancı anahtarlar ve kontrol kısıtlamaları da iş mantığıdır!). Prosedürel ise, döngüler ve koşullu dallar içererek (ve bir ifadede gerçekten değiştirilemez), koda koyun.
Çöp dökümü DB'lerinden kaçının
Tüm işletme mantığını uygulama koduna yerleştirme girişimleri, muhtemelen (ilişkisel) veritabanını, ilişkisel tasarımın çoğunlukla tamamen ihmal edildiği, verilerin tutarsız herhangi bir duruma sahip olabileceği ve normalizasyonun eksik olduğu (çöplükle XML, JSON , CSV vb. Çöp kutusu sütunları).
Yalnızca bu tür bir uygulama mantığı, NoSQL'in yükselmesinin temel nedenlerinden biridir - tabii ki, uygulamanın yıllarca ilişkisel veri tabanı içine yerleştirilmiş olan tüm mantığa bakması gerekliliği dezavantajlıdır. Bununla birlikte, NoSQL veritabanları bu tür veri işleme için daha uygundur; örneğin, veri belgeleri kendi içinde gizli bir "ilişkisel bütünlüğü" korur. İlişkisel DB'ler için, sadece daha fazla belaya neden olan, suiistimaldir.
Usul kodu yerine İfadeler (set tabanlı)
En iyi durumda, her veri sorgusu veya işlemi prosedürel kod yerine ifade olarak kodlanmalıdır. Bunun için büyük bir destek, programlama dilleri, .NET dünyasında LINQ gibi ifadeleri desteklerken (ne yazık ki, yalnızca şu anda sorgular, manipülasyon yok). İlişkisel DB tarafında, yordamsal imleç döngüleri yerine SQL deyimi ifadelerini tercih etmek uzun zamandır öğretilmiştir. Böylece, DB işlemi optimize edebilir, paralel olarak yapabilir veya ne işe yarayabilirse.
DB veri bütünlüğü mekanizmalarını kullanın
Yabancı Anahtar ve Kontrol kısıtlamaları olan RDBMS, hesaplanan sütunlar, muhtemelen tetikleyiciler ve görüşler söz konusu olduğunda, temel iş mantığını veritabanında depolamak için burasıdır. Doğru normalleştirme, verinin benzersiz ve farklı bir örneğini sağlamak için veri bütünlüğünü korumaya yardımcı olur. Kod ve veri tabanı içinde kopyalamanız gerekse bile, veri bütünlüğünün bu temel mekanizmaları ihmal edilmemelidir!
Saklı İşlemler
Veritabanları SQL için derlenmiş yürütme planlarını sürdürdüğü ve aynı sorgu tekrar geldiğinde, sadece farklı parametrelerle tekrar kullandıklarından Saklı Prosedürler nadiren gereklidir. Dolayısıyla, SP'ler için önceden derleme argümanı artık geçerli değil. Biri, çoğu zaman önceden derlenmiş sorgu planlarını bulan uygulama veya ORM'de SQL sorgularını saklayabilir veya otomatik olarak oluşturabilir. SQL, açıkça işlemsel unsurları kullanmadığınız sürece bir ifade dilidir. Bu nedenle, en iyi durumda, SQL'e çevrilebilecek kod ifadelerini kullanırsınız.
Oluşturulan ORM dahil olmak üzere uygulama tarafı, SQL, saklı yordamlardan farklı olarak artık veritabanının içinde kalmamasına rağmen, hala veritabanı kodu olarak sayıyorum. Çünkü hala SQL ve veritabanı bilgisi gerektiriyor (en basit CRUD hariç) ve eğer doğru uygulanırsa, genellikle C # veya Java gibi programlama dilleri ile oluşturulan prosedürel koddan oldukça farklı çalışır.