Normalize mi Denormalize mi? Tablo Tasarımında Tutarlılık ile Okuma Hızı Dengesi
Karşılaştırma

Normalize mi Denormalize mi? Tablo Tasarımında Tutarlılık ile Okuma Hızı Dengesi

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 6 dk okuma

Normalizasyon, her bilgiyi tek bir yerde tutarak tekrarı ve tutarsızlığı önler; denormalizasyon ise belirli sorguları hızlandırmak ya da basitleştirmek için bu tekrarı bilinçli olarak geri getirir. Doğru tasarım genellikle önce normalize etmek, sonra ölçülmüş bir ihtiyaç için seçici biçimde denormalize etmektir.

Bir bakışta

  1. Denormalizasyon, normalizasyonun yokluğu değil, bilinçli bir istisnasıdır. Hiç normalize edilmemiş tablo tasarım eksikliğidir; denormalize tablo ise nedeni ve bedeli bilinen bir karardır.
  2. Normalizasyonun bedeli birleştirme, denormalizasyonun bedeli tutarlılık yüküdür. Bilgi tek yerde durursa okurken tablolar birleştirilir; birden çok yerde durursa güncellerken hepsi aynı anda değiştirilmelidir.
  3. Sık değişen veri normalize, sık okunan ve az değişen veri denormalize edilmeye adaydır. Microsoft'un normalizasyon notu da üçüncü normal formu öncelikle sık değişen verilere uygulamayı uygulanabilir bir yol olarak anar.
  4. Analitik modellerde denormalize boyut tablosu yaygın bir tercihtir. Power BI rehberi, kar tanesi boyutunu tek bir denormalize model tablosunda birleştirmenin faydasının genellikle daha ağır bastığını belirtir.
  5. Tarihsel kopya ile denormalizasyon aynı şey değildir. Siparişteki o anki fiyatı saklamak tekrar değil, zamana bağlı ayrı bir olgudur.

Ortak zemin: aynı veri, iki farklı yerleşim

Normalizasyon ve denormalizasyon aynı soruya verilen iki yanıttır: bir bilgi veritabanında kaç yerde durmalı? Microsoft'un normalizasyon açıklaması, normalizasyonu verileri koruyacak ve veritabanını daha esnek kılacak kurallara göre tablolar oluşturup aralarında ilişki kurmak olarak tanımlar; amaç tekrarı ve tutarsız bağımlılığı ortadan kaldırmaktır. Tekrarlanan veri disk alanı harcar ve bakım sorunu yaratır: birden fazla yerde duran bir bilgi değiştiğinde, her yerde tam olarak aynı biçimde değiştirilmesi gerekir.

Denormalizasyon bu ilkenin bilinçli bir istisnasıdır. Power BI'ın yıldız şema rehberi farkı somut bir örnekle anlatır: satış tablosu ürünü yalnız ürün anahtarıyla tutuyorsa normalizedir; ürün anahtarının yanında kategori, renk ve beden gibi ürün bilgilerini de tutuyorsa denormalizedir.

İkisi arasında seçim yapmak, bir ödünleşimi yönetmektir. Normalize tasarım yazmayı ve tutarlılığı kolaylaştırır, ama okurken tabloları birleştirmeyi gerektirir. Denormalize tasarım okumayı kolaylaştırır, ama aynı bilginin her kopyasını güncel tutma yükünü getirir.

Ölçüt ölçüt iki yaklaşım

  • Ölçüt: Tekrar. Normalizasyon: her bilgi tek yerde; tekrar en aza indirilir. / Denormalizasyon: seçilen bilgiler birden fazla yerde ya da önceden hesaplanmış olarak tutulur.
  • Ölçüt: Yazma. Normalizasyon: güncelleme tek yerde yapılır, basittir. / Denormalizasyon: güncelleme tüm kopyalara yayılmalıdır; tetikleyici, uygulama kodu ya da yenileme işi gerekir.
  • Ölçüt: Okuma. Normalizasyon: ilişkili bilgiyi görmek için tablolar birleştirilir. / Denormalizasyon: sık kullanılan bilgi tek tablodan okunur.
  • Ölçüt: Tutarlılık riski. Normalizasyon: düşük; aynı bilginin çelişen iki kopyası olmaz. / Denormalizasyon: kopyalar senkron tutulmazsa güncelleme anomalisi doğar.
  • Ölçüt: Depolama. Normalizasyon: daha az alan. / Denormalizasyon: tekrar nedeniyle daha fazla alan.
  • Ölçüt: Tipik yer. Normalizasyon: işlem sistemleri, sık ve dağınık yazılan veriler. / Denormalizasyon: raporlama tabloları, analitik modeller, çok sık okunan ekranlar.
  • Ölçüt: Değişime uyum. Normalizasyon: yeni bir ilişki ya da alan eklemek kolaydır. / Denormalizasyon: her yapısal değişiklik kopyaları da etkiler.

Microsoft'un notu, gerçek hayatın her zaman tam uyuma izin vermediğini de kabul eder: tüm alan bağımlılıklarını ortadan kaldırmak için çok sayıda küçük tablo oluşturmak teoride doğrudur, ama performansı düşürebilir. Notun önerisi, ilk üç kuraldan birini çiğnemeye karar verirseniz uygulamanın tekrar ve tutarsız bağımlılık gibi sorunları önceden hesaba katmasıdır.

Denormalizasyonun yaygın biçimleri

Denormalizasyon tek bir teknik değil, birkaç farklı karardır. Tablo tasarımında en sık karşılaşılanlar şunlardır:

  • Tekrarlanan sütun: sık birlikte okunan bir bilgiyi ilişkili tablodan kopyalamak; örneğin sipariş listesinde gösterilen müşteri adını sipariş tablosunda da tutmak.
  • Türetilmiş ya da hesaplanmış alan: her okumada yeniden hesaplanan bir değeri saklamak; örneğin bir ürünün yorum sayısını ürün tablosunda tutmak.
  • Özet tablo: ayrıntılı kayıtlardan önceden hesaplanmış toplamları ayrı bir tabloda tutmak; örneğin günlük satış özeti.
  • Tabloları birleştirmek: hiyerarşik olarak ayrılmış tabloları tek tabloda toplamak; örneğin kategori, alt kategori ve ürünü tek bir ürün tablosunda tutmak. Power BI rehberi bunu, kar tanesi boyutunu tek bir model tablosunda birleştirmek olarak anlatır ve faydasının genellikle daha ağır bastığını, bedelinin ise büyük boyut tablolarında artan depolama olduğunu belirtir.
  • Veritabanı motorunun sunduğu materyalize görünüm ve benzeri yapılar: tutarlılık işini motora bırakarak sorgu sonucunu saklamak.

Son madde önemlidir: aynı okuma kazancını, kopyaları elle yönetmeden sağlayan bir araç varsa, çoğu zaman önce o denenmelidir.

Karar akışı: önce normalize et, sonra ölç

Denormalizasyon kararı, tasarımın başında değil, kanıt oluştuğunda verilmelidir. Sağlıklı akış birbirinin üzerine kurulan adımlardan oluşur.

İlk adımda tasarım normalize edilir. Varlıklar, anahtarlar ve ilişkiler netleşir; Microsoft notunun ifadesiyle çoğu uygulama için üçüncü normal form gereken en yüksek düzey sayılır.

Ardından gerçek sorgular ölçülür. Hangi ekran ya da rapor yavaş, sorgu planında zaman nereye gidiyor? Çoğu yavaşlık eksik indeks ya da kötü yazılmış sorgudan kaynaklanır; bunlar tasarımı bozmadan çözülebilir.

Sonra, ancak indeks ve sorgu iyileştirmesi yetmiyorsa, darboğazı oluşturan noktaya özel ve seçici bir denormalizasyon yapılır. Tüm şemayı değil, ölçülmüş sorunu hedefler.

Son adımda kopyaların tutarlılığı güvenceye alınır: hangi kaynağın asıl olduğu yazılır, kopyayı güncelleyen mekanizma belirlenir ve kopya ile kaynak arasındaki farkı yakalayan bir kontrol kurulur.

Örnek: bir e-ticaret yönetim panelinde sipariş listesi her açılışta müşteri, adres ve kargo tablolarını birleştiriyor ve yoğun saatlerde yavaşlıyor. Ekip önce eksik indeksleri ekler, sorguyu sadeleştirir. Liste hâlâ yavaşsa, yalnız listede gösterilen müşteri adını sipariş tablosuna kopyalar ve müşteri adı değiştiğinde bu kopyayı güncelleyen mekanizmayı aynı değişiklikte kurar.

Şekil 1

Denormalizasyon, normalize bir tasarımın üzerine ölçülerek eklenir

  1. Normalize etVarlıklar, anahtarlar ve ilişkiler; çoğu uygulamada üçüncü normal form.
  2. Gerçek sorguları ölçYavaşlığın nedenini sorgu planında bul; önce indeks ve sorgu iyileştir.
  3. Seçici denormalize etYalnız ölçülmüş darboğaz için kopya, türetilmiş alan ya da özet tablo.
  4. Tutarlılığı güvenceye alAsıl kaynağı yaz, güncelleme mekanizmasını ve fark kontrolünü kur.
Kaynak: Sayfa içeriğiMindset Institute

Hangi durumda hangisi?

Tek bir doğru yanıt yoktur; tablonun nasıl kullanıldığı belirler.

  • Veri sık ve farklı kaynaklardan yazılıyorsa, tutarlılık kritikse normalizasyon ağır basar. Müşteri, stok ve hesap kayıtları gibi verilerde tek doğru kaynak vazgeçilmezdir.
  • Veri az değişiyor ama çok sık okunuyorsa, denormalizasyon makul bir adaydır. Kategori adları, il listeleri ya da nadiren değişen ürün özellikleri buna örnektir.
  • Tablo raporlama ya da analiz içinse, denormalize boyut tabloları yaygın ve önerilen bir yoldur. Microsoft'un çevrim içi analitik işleme belgesi, analitik sistemlerin geleneksel normalizasyon yerine genellikle yıldız ya da kar tanesi şeması kullandığını belirtir.
  • Bilgi zamana bağlıysa, kopya değil tarihsel kayıt söz konusudur. Siparişteki o anki fiyat ya da teslimat adresi, kaynakla senkron tutulmamalıdır; aksine kaynak değiştiğinde de değişmemelidir.
Şekil 2

Kararı verinin yazılma ve okunma biçimi belirler

Bu bilgi nasıl kullanılıyor?
  1. Sık değişiyor, birden çok kaynaktan yazılıyorNormalize tutTek doğru kaynak, güncelleme tek yerde.
  2. Az değişiyor, çok sık okunuyor ve ölçülmüş yavaşlık varSeçici denormalize etKopyayı güncelleyen mekanizmayla birlikte.
  3. Raporlama ya da analitik modelDenormalize boyut tablosuYıldız şema yaklaşımı.
  4. İşlem anındaki değeri saklamak gerekiyorTarihsel kayıt olarak saklaKaynak değişince değişmemeli; bu denormalizasyon değildir.
Kaynak: Sayfa içeriğiMindset Institute

Sık yapılan hatalar

  • Ölçmeden denormalize etmek. "Birleştirme yavaştır" varsayımıyla baştan kopya alanlar eklemek, ileride hiç ihtiyaç duyulmayacak bir tutarlılık yükü yaratır.
  • Güncelleme mekanizmasını sonraya bırakmak. Kopya alan eklenip onu güncel tutan tetikleyici, uygulama kodu ya da yenileme işi kurulmazsa ilk değişiklikte veri çelişir.
  • Asıl kaynağı belirsiz bırakmak. İki yerde duran bilginin hangisinin doğru kabul edileceği yazılmazsa, çelişki çıktığında karar verilemez.
  • Tarihsel kaydı senkron tutmaya çalışmak. Siparişteki fiyatı ürün fiyatı değişince güncellemek, geçmiş siparişlerin tutarını bozar.
  • Analitik modeli işlem tablosunun kopyası gibi tasarlamak. Rapor için kurulan model, işlem sisteminin normalize yapısını aynen taşırsa raporlar gereksiz karmaşıklaşır; Power BI rehberi bu durumda boyut ve olgu tablolarına ayrılmış bir yıldız şemayı önerir.

Mindset programlarında nerede çalışılır?

Veritabanı tasarımcıları, yazılım geliştiriciler ve veri modelleme uzmanları için bu karar, şema tasarımının ve performans çalışmasının kesiştiği yerdedir. Veritabanı Tasarımı ve Normalizasyon eğitimi normalizasyon formlarını, bütünlük kısıtlarını ve denormalizasyonun performans ödünleşimini ayrı modüllerde ele alır. Analitik model tarafında Boyutsal Modelleme ve Kimball Metodolojisi eğitimi olgu ve boyut tablolarının tasarımını işler.

İlgili Mindset programı

Veritabanı Tasarımı ve Normalizasyon

Sık sorulanlar

Sık sorulan sorular

NoSQL veritabanlarında normalizasyon kuralları geçerli mi?

Belge ve anahtar-değer veritabanlarında veri çoğunlukla okunacağı biçimde, iç içe ve tekrar eden yapılar halinde saklanır; bu yüzden bu sistemlerde denormalize tasarım varsayılan yaklaşımdır. Ancak tutarlılık sorunu ortadan kalkmaz: aynı bilginin birden fazla belgede durması, güncellemelerin uygulama düzeyinde yönetilmesini gerektirir. Tasarım, burada da sorgu ve güncelleme desenlerine göre yapılır.

Dördüncü ve beşinci normal formlara uymak gerekir mi?

Microsoft'un normalizasyon notu, daha ileri normal formların bulunduğunu ama pratik tasarımda nadiren dikkate alındığını belirtir; bunları göz ardı etmenin tasarımı mükemmellikten uzaklaştırabileceğini, ancak işlevselliği etkilememesi gerektiğini söyler. Çoğu uygulamada hedef üçüncü normal formdur. İleri formlar, çok değerli bağımlılıkların gerçekten sorun yarattığı özel durumlarda değerlendirilir.

Denormalize alanı güncel tutmanın en güvenli yolu nedir?

Mümkünse işi veritabanı motoruna bırakmak: hesaplanmış sütunlar ya da motorun sağladığı materyalize görünüm benzeri yapılar, tutarlılığı motor düzeyinde korur. Bu mümkün değilse kaynağı ve kopyayı aynı işlem içinde güncellemek, ya da kaynak değiştiğinde çalışan bir tetikleyici kullanmak gerekir. Hangi yol seçilirse seçilsin, kopya ile kaynağı periyodik olarak karşılaştıran bir kontrol, gözden kaçan farkları yakalar.

Denormalizasyon her zaman okuma performansını artırır mı?

Hayır. Kopyalanan sütunlar tabloyu genişletir; çok geniş satırlar, sorgunun ihtiyaç duymadığı veriyi de okumasına yol açabilir. Ayrıca yazma işlemleri ağırlaşır, çünkü her değişiklik birden fazla yere yayılır. Kazanç, ancak sık çalışan belirli bir sorgu, birleştirmeden kurtulduğunda ölçülebilir biçimde hızlanıyorsa gerçektir. Bu yüzden karar öncesi ve sonrası aynı sorgu ölçülmelidir.

Normalizasyon ile Denormalizasyon Farkı