"Depo deseni" veritabanı tasarımı için hangi teorik temeli buldunuz? Hiçbirini sanmıyorum. Sahte bir binada oturan bir karmaşıklık katmanıdır: "kalıcılık katmanı" ndan izole etmeniz gereken bir şeydir. Söyleyebileceğim kadarıyla, ilişkisel tasarım ilkelerinin yaygın olmayan programlama cehaletiyle oynuyor ve uygulamanın OO tasarımının önceden belirlenmiş bir merkeziyetiyle ilgileniyor. Fakat teorik gerekçelerden bağımsız olarak, rasyonel, varlığındaki varlığını haklı çıkarmaz.
Veritabanı tasarımına giden tek doğru yol 30 yıl içinde değişmedi: verileri analiz etmek. Anahtarları ve kısıtlamaları ve çoktan bire ilişkilerini bulun. Tablolarınızı Boyce-Codd normal formuna göre tasarlayın. Veri erişimini kolaylaştırmak için görünümleri ve saklı yordamları kullanın.
Her ne kadar sevilmemişse, bir SQL DBMS, programcının sağlayabileceği her şeyden daha iyi bir yalıtım katmanı sağlar. Veri tabanı değiştikçe erişmek için kullanılan SQL'in değişmesi gerekebileceği doğrudur. Ancak , arabuluculuk katmanının olup olmadığına bakılmaksızın bunun doğru olduğunu unutmayın . Uygulama, DBMS'ye erişmek için görünümler ve saklı yordamlar kullandığı sürece, sıradan SQL mühendislik araçları, temeldeki veritabanında yapılan değişikliklerin bu görünümleri ve saklı yordamları geçersiz hale getirdiğini gösterecektir.
Elbette, zorluk var. Bir arabuluculuk katmanı, izolasyon illüzyonunu ve nasıl yapılacağını bildiği bir yazma kodu programcısına konfor sağlar. Veritabanı tasarımını ve SQL'i öğrenmek, yeni bir şeyler öğrenmeyi gerektirir. Çoğu insan düşünmekten çok ölür ve çoğu başarılı olur.
Takımınızdaki biri şüphesiz, 200 dersinizi desteklemek için SQL yazmanın çok fazla iş olduğunu düşünüyor. Şüphesiz. Ama en azından faydalı bir iş. OO tasarımınızı taklit ederek bir veritabanı tasarlarsanız, çoğu işe yaramaz, birçok işe yaramaz ve DBMS'nin size sunduklarının çoğunu yenersiniz.
Örneğin, Çalışma Birimi'ni veritabanına yansıtan düşünün (tablo veya tablolar gibi, sanırım). İş birimi DBMS'nin yerleşik bir hizmetidir: begin transaction
... veritabanını güncelle commit transaction
. Sınıflarınızın SQL'deki veritabanı tablolarıyla eşleştirilmesinden başka modellenecek bir şey yok.
Sorunuz 4 yıl önce gönderildi. Cevap veriyorum, çünkü son zamanlarda bir şekilde "güncellendi", bunun hala birileri için ilgi çekici olduğunu gösteriyor. Umarım cevabım, okuyucuyu, anlamsız bir geçici çözüm benimsemek yerine, temel ilişkisel teoriyi soruna uygulamaya teşvik eder.