Database ternormalisasi vs. tidak ternormalisasi

Perancangan Basis Data

Lis Sulmont

Curriculum Manager

Kembali ke contoh toko buku

Tidak ternormalisasi: skema bintang

$$

Ternormalisasi: skema snowflake

$$

Perancangan Basis Data

Kueri tidak ternormalisasi

Tujuan: dapatkan jumlah buku Octavia E. Butler yang terjual di Vancouver pada Q4 2018

  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

Total 3 join

Perancangan Basis Data

Kueri ternormalisasi

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
Perancangan Basis Data

Kueri ternormalisasi (lanj.)

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

Total 8 join

Jadi, mengapa kita ingin menormalisasi database?

Perancangan Basis Data

Normalisasi menghemat ruang

Database tidak ternormalisasi memungkinkan redundansi data

Perancangan Basis Data

Normalisasi menghemat ruang

Normalisasi menghilangkan redundansi data

Perancangan Basis Data

Normalisasi meningkatkan integritas data

$$

1. Menegakkan konsistensi data

Harus patuh konvensi penamaan karena integritas referensial, mis. 'California', bukan 'CA' atau 'california'

2. Lebih aman saat update, hapus, dan insert

Redundansi lebih sedikit = lebih sedikit rekaman yang diubah

3. Lebih mudah didesain ulang dengan memperluas

Tabel kecil lebih mudah diperluas daripada tabel besar

Perancangan Basis Data

Normalisasi database

Keuntungan

  • Normalisasi menghilangkan redundansi data: hemat penyimpanan

  • Integritas data lebih baik: akurat dan konsisten

Kerugian

  • Kueri kompleks butuh lebih banyak CPU
Perancangan Basis Data

Ingat OLTP dan OLAP?

OLTP

contoh: database operasional

Biasanya sangat ternormalisasi

  • Intensif tulis
  • Memprioritaskan insert data yang cepat dan aman

OLAP

contoh: gudang data

Biasanya kurang ternormalisasi

  • Intensif baca
  • Memprioritaskan kueri analitik yang lebih cepat
Perancangan Basis Data

Ayo berlatih!

Perancangan Basis Data

Preparing Video For Download...