Hem nesne yönelimli programlama hem de (çoğunlukla işlemsel, ancak bazı OLAP) veritabanı tasarımı yapıyorum ve durumlarım için, yinelenen temalar var (en azından OLTP ile).
3nf normalizasyon uygulamak, tek sorumluluk ilkesinin bazı varyantlarını uygulamama yardımcı olur. Bir tablo sisteminizdeki bir kavramı temsil etmelidir - ve kavramlar gerçekliği taklit etmeye çalışacak şekilde birbirleriyle ilişkili olmalıdır; Örneğin, bir Müşterinin 0 veya daha fazla Etkinliğe sahip olabileceği bir sistem oluşturuyorsam, bir Müşteri Tablosu ve bir Etkinlik Tablosu oluştururum. Etkinlik tablosunun Müşteri tablosuyla yabancı anahtar ilişkisi vardır. Saklı yordamlar oluştururken, Müşterinin ve faaliyete katılmak için bir dış birleştirme kullandığınızdan emin olurum çünkü bir Müşterinin 0 etkinliği olabileceği iş gereksinimi.
Ayrıca köprü (link) tablolarını kullanarak genişletilebilirlik fırsatlarına dikkat ediyorum. Örneğin, bir kitabın sınırsız (değişken) yazar sayısına sahip olabileceği bir iş kuralını temsil etmeye çalışsaydım, bir Kitap Tablosu, bir Yazar tablosu ve her ikisine de yabancı anahtar referansları olan bir köprü / bağlantı tablosu oluştururdum Kitap ve Yazar.
Ayrıca, tüm tablolarda yedek anahtarlar kullanıyorum (tipik olarak otomatik olarak artan kimlik sütunları, ancak belki de Kılavuzlar - koddaki kılavuzlarla yapılan takas, basit bir tam sayıdan daha fazla bellek alanı kaplamasıdır) ve benim için doğal anahtarlara güvenmekten kaçınırım aramaları (Köprü / Bağlantı Tabloları hariç). Varsayılan olarak, ortak yabancı anahtar sütunlarında dizinler oluşturur ve dizinleme stratejilerini optimize etmek için zaman zaman saklı yordamları / sistem sorgularını gözden geçiririm. Kullandığım başka bir dizinleme stratejisi, kodumda bir arama sütununa dayalı bir koleksiyon oluşturduğum yerleri aramak ve arama sütunlarına uygun dizinler eklemektir.