Normalize ve denormalize veritabanları

Veritabanı Tasarımı

Lis Sulmont

Curriculum Manager

Kitapçı örneğimize geri dönelim

Denormalize: yıldız şeması

$$

Normalize: kar tanesi şeması

$$

Veritabanı Tasarımı

Denormalize Sorgu

Hedef: 2018 4. çeyrekte Vancouver’da satılan tüm Octavia E. Butler kitaplarının adedini almak

  SELECT SUM(quantity) FROM fact_booksales
    -- Join to get city
    INNER JOIN dim_store_star on fact_booksales.store_id = dim_store_star.store_id
    -- Join to get author
    INNER JOIN dim_book_star on fact_booksales.book_id = dim_book_star.book_id
    -- Join to get year and quarter
    INNER JOIN dim_time_star on fact_booksales.time_id = dim_time_star.time_id
  WHERE 
    dim_store_star.city = 'Vancouver' AND dim_book_star.author = 'Octavia E. Butler' AND
    dim_time_star.year = 2018 AND dim_time_star.quarter = 4;
7600

Toplam 3 join

Veritabanı Tasarımı

Normalize sorgu

SELECT
  SUM(fact_booksales.quantity)
FROM
  fact_booksales
  -- Join to get city
  INNER JOIN dim_store_sf ON fact_booksales.store_id = dim_store_sf.store_id
  INNER JOIN dim_city_sf ON dim_store_sf.city_id = dim_city_sf.city_id
  -- Join to get author
  INNER JOIN dim_book_sf ON fact_booksales.book_id = dim_book_sf.book_id
  INNER JOIN dim_author_sf ON dim_book_sf.author_id = dim_author_sf.author_id
  -- Join to get year and quarter
  INNER JOIN dim_time_sf ON fact_booksales.time_id = dim_time_sf.time_id
  INNER JOIN dim_month_sf ON dim_time_sf.month_id = dim_month_sf.month_id
  INNER JOIN dim_quarter_sf ON dim_month_sf.quarter_id =  dim_quarter_sf.quarter_id
  INNER JOIN dim_year_sf ON dim_quarter_sf.year_id = dim_year_sf.year_id
Veritabanı Tasarımı

Normalize sorgu (devam)

WHERE
  dim_city_sf.city = `Vancouver`
  AND 
  dim_author_sf.author = `Octavia E. Butler`
  AND
  dim_year_sf.year = 2018 AND dim_quarter_sf.quarter = 4; 
sum
7600

Toplam 8 join

Peki, neden bir veritabanını normalize etmek isteriz?

Veritabanı Tasarımı

Normalize etme alan kazandırır

Denormalize veritabanları veri fazlalığına olanak tanır

Veritabanı Tasarımı

Normalize etme alan kazandırır

Normalize etme veri fazlalığını ortadan kaldırır

Veritabanı Tasarımı

Normalize etme daha iyi veri bütünlüğü sağlar

$$

1. Veri tutarlılığını sağlar

Referans bütünlüğü nedeniyle adlandırma kurallarına uymalıdır; ör. 'California', 'CA' veya 'california' değil

2. Güncelleme, silme ve ekleme daha güvenli

Daha az veri fazlalığı = değiştirilecek daha az kayıt

3. Genişleterek yeniden tasarlamak daha kolay

Küçük tablolar büyük tablolardan daha kolay genişletilir

Veritabanı Tasarımı

Veritabanı normalizasyonu

Avantajlar

  • Normalize etme veri fazlalığını ortadan kaldırır: depolamadan tasarruf

  • Daha iyi veri bütünlüğü: doğru ve tutarlı veri

Dezavantajlar

  • Karmaşık sorgular daha fazla CPU ister
Veritabanı Tasarımı

OLTP ve OLAP’ı hatırlıyor musunuz?

OLTP

ör. Operasyonel veritabanları

Genelde yüksek düzeyde normalize

  • Yazma ağırlıklı
  • Verinin daha hızlı ve güvenli eklenmesini önceler

OLAP

ör. Veri ambarları

Genelde daha az normalize

  • Okuma ağırlıklı
  • Analitik için daha hızlı sorguları önceler
Veritabanı Tasarımı

Haydi pratik yapalım!

Veritabanı Tasarımı

Preparing Video For Download...