Denormalizasyon — Ne Zaman Yapılır?
Giriş — Normalizasyonun Bedeli
Normalizasyon veri bütünlüğünü artırır ama bir bedeli var: daha fazla tablo = daha fazla JOIN = daha yavaş sorgular. Denormalizasyon, performans kazanmak için kasıtlı olarak veri tekrarı yaratma stratejisidir.
🎯 Analoji: Bir kütüphanede her kitabın detayı ana kayıt defterinde. Ama en popüler 10 kitabın bilgisini girişteki panoya da yazdın — her seferinde kayıt defterine koşmak yerine panoya bakarsın. Bu denormalizasyon: veri tekrarı var ama erişim hızlı.
Ne Zaman Denormalize Edilir?
Okuma ağırlıklı tablolar: Raporlama/analytics sorguları çok JOIN gerektiriyorsa
Sık erişilen hesaplama sonuçları: Her sorguda SUM/COUNT hesaplamak yerine saklama
Performans darboğazı: EXPLAIN ile kanıtlanmış yavaşlık
Denormalizasyon Teknikleri
1. Hesaplanmış Sütun Ekleme
-- Normalizasyon: her seferinde sipariş kalemlerinden hesapla
SELECT o.order_id, SUM(oi.quantity * oi.unit_price) AS total
FROM orders o JOIN order_items oi ON o.order_id = oi.order_id
GROUP BY o.order_id;
-- Denormalizasyon: total_amount sütununu orders'ta sakla
ALTER TABLE orders ADD COLUMN total_amount DECIMAL(10,2);
-- Sipariş oluşturulduğunda veya güncellendiğinde trigger ile güncelle2. Sık Erişilen Sütunu Kopyalama
-- Her sipariş sorgusunda müşteri adı için JOIN gerekir
-- Denormalizasyon: müşteri adını orders'ta da tut
ALTER TABLE orders ADD COLUMN customer_name VARCHAR(100);
-- ⚠️ Müşteri adı değişirse orders'ta da güncellenmeli!3. Özet/Raporlama Tabloları
-- Günlük satış özeti (her gün otomatik güncellenir)
CREATE TABLE daily_sales (
report_date DATE PRIMARY KEY,
total_orders INT,
total_revenue DECIMAL(12,2),
avg_order_value DECIMAL(10,2),
unique_customers INT
);Denormalizasyonun Riskleri
| Risk | Açıklama | Çözüm |
|---|---|---|
| Güncelleme anomalisi | Kopya veri tutarsız olabilir | Trigger veya uygulama katmanında senkronizasyon |
| Disk alanı | Tekrar eden veri daha fazla yer kaplar | Çoğunlukla kabul edilebilir |
| Karmaşıklık | Hangi veri "gerçek", hangisi kopya? | Dokümantasyon |
Altın Kural
Önce normalize et, sonra performans gerekiyorsa kanıtla (EXPLAIN), sonra denormalize et. Erken denormalizasyon anti-pattern'dir.
Özet
Denormalizasyon, performans için kasıtlı veri tekrarıdır
Hesaplanmış sütunlar, kopya alanlar ve özet tablolar yaygın tekniklerdir
Güncelleme anomalileri riski vardır — trigger/uygulama ile senkronize et
Önce normalize et, performans sorunu kanıtlanırsa denormalize et
AI Asistan
Sorularını yanıtlamaya hazır