Veritabanı normalizasyonu, veri tekrarını azaltmak ve veri bütünlüğünü sağlamak için tabloları organize etme sürecidir. Ancak bazı durumlarda performans için bilinçli olarak denormalizasyon tercih edilir.
Normal Formlar
1NF - Birinci Normal Form
Her sütun atomik (bölünemez) değerler içermelidir:
-- YANLIŞ: Tekrarlı grup
user_id | phone_numbers
1 | 555-1234, 555-5678
-- DOĞRU: Ayrı tablo
user_phones: user_id | phone_number
1 | 555-1234
1 | 555-56782NF - İkinci Normal Form
1NF'yi sağlamalı ve tüm alanlar birincil anahtara tam bağımlı olmalıdır. Kısmi bağımlılıklar ayrı tablolara taşınmalıdır.
3NF - Üçüncü Normal Form
2NF'yi sağlamalı ve geçişli bağımlılıklar olmamalıdır:
-- YANLIŞ: Geçişli bağımlılık
orders: order_id | customer_id | customer_name
-- DOĞRU: Ayrı tablolar
orders: order_id | customer_id
customers: customer_id | customer_nameNe Zaman Denormalizasyon?
- Okuma ağırlıklı sistemlerde JOIN maliyetini düşürmek için
- Raporlama ve analitik tablolarında
- Önbellek tabloları (materialized views) oluşturmak için
- Çok yüksek trafikli uygulamalarda
Sonuç
Normalizasyon, veritabanı tasarımının temelidir. Önce normalize edin, ardından performans testleri sonucunda gerekli yerlerde bilinçli olarak denormalize edin. Erken denormalizasyon, bakım maliyetini artırır.
