Bir uygulamanın uzun ömürlü olup olmayacağını en çok etkileyen kararlardan biri veritabanı tasarımıdır. Kötü tasarlanmış tablolar; tekrar eden veri, tutarsızlık ve her yeni özellikte zorlanma demektir. Normalizasyon, veriyi tekrarı ve tutarsızlığı en aza indirecek şekilde tablolara ayırma yöntemidir.
Kötü tasarım örneği
Bir sipariş tablosunda her satırda müşterinin adı, telefonu ve adresi tekrar yazılıyorsa: müşteri telefonunu değiştirdiğinde onlarca satırı güncellemek gerekir; biri unutulursa veri tutarsız hale gelir.
Normal formlar
Birinci normal form (1NF)
Her hücre tek bir değer içerir. "Telefonlar: 0532..., 0533..." gibi virgülle ayrılmış listeler yerine ayrı satırlar veya ayrı tablo kullanılır.
İkinci normal form (2NF)
Bileşik anahtarlı tablolarda her sütun anahtarın tamamına bağlı olmalıdır. Sipariş satırı tablosunda ürün adı, sipariş-ürün anahtarına değil yalnızca ürüne bağlıdır; bu yüzden ürün tablosunda durmalıdır.
Üçüncü normal form (3NF)
Anahtar olmayan sütunlar başka anahtar olmayan sütunlara bağlı olmamalıdır. Müşteri tablosunda hem ilçe hem ilçenin bağlı olduğu il tutuluyorsa, il bilgisi ilçe tablosuna taşınabilir.
Çoğu işletme uygulaması için 3NF iyi bir hedeftir.
Anahtarlar ve ilişkiler
- Birincil anahtar: Her kaydı benzersiz tanımlar.
- Yabancı anahtar: Tablolar arası ilişkiyi kurar ve veritabanının tutarlılığı korumasını sağlar; var olmayan bir müşteriye sipariş bağlanamaz.
- Benzersizlik kısıtları: Aynı vergi numarasıyla iki müşteri açılmasını engeller.
İndeksler
Normalizasyon doğru yapıyı, indeksler ise hızlı erişimi sağlar. Sık sorgulanan ve birleştirmede kullanılan sütunlar indekslenmelidir. Bkz. SQL Server performans.
Bilinçli denormalizasyon
Bazen performans veya tarihsel doğruluk için veri bilerek tekrar edilir:
- Siparişe, sipariş anındaki ürün fiyatı ve müşteri adresi kopyalanır. Çünkü ürün fiyatı sonradan değişse de geçmiş siparişin tutarı değişmemelidir.
- Raporlama için özet tablolar tutulur.
Bu kararlar bilinçli ve belgelenmiş olmalıdır.
Excel'den veritabanına geçerken
Excel tabloları genellikle normalizasyonu olmayan, her şeyin tek sayfada olduğu yapılardır. Geçişte verinin doğru tablolara ayrılması, yeni sistemin başarısını belirler. Bkz. Excel'den özel yazılıma geçiş.
Sık sorulan sorular
Normalizasyon performansı düşürür mü?
Çok sayıda birleştirme gerektiren sorgularda etkisi olabilir; ancak doğru indekslerle çoğu işletme uygulamasında sorun yaratmaz. Asıl risk, tutarsız veridir.
EF Core kullanıyorsam tasarım yine önemli mi?
Kesinlikle. ORM tabloları sizin tasarladığınız modele göre oluşturur. Bkz. Entity Framework Core.
Sonuç
İyi bir veritabanı tasarımı, uygulamanın yıllarca sorunsuz büyümesini sağlar. Veri modelinizi birlikte tasarlamak için iletişime geçebilirsiniz.