Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Skema Bintang vs. Skema Kepingan Salju

Dalam dua artikel sebelumnya, kami mempertimbangkan dua model gudang data yang paling umum:skema bintang dan skema kepingan salju. Hari ini, kami akan memeriksa perbedaan antara kedua skema ini dan kami akan menjelaskan kapan sebaiknya menggunakan satu atau yang lain.

Skema bintang dan skema kepingan salju adalah cara untuk mengatur data mart atau seluruh gudang data menggunakan database relasional. Keduanya menggunakan tabel dimensi untuk mendeskripsikan data yang dikumpulkan dalam tabel fakta .

Setiap orang menjual sesuatu, baik itu pengetahuan, produk, atau layanan. Menyimpan informasi ini, baik dalam sistem operasional maupun dalam sistem pelaporan, juga merupakan kebutuhan. Jadi kita bisa berharap untuk menemukan beberapa jenis model penjualan di dalam gudang data hampir setiap perusahaan.

Mari kita lihat sekali lagi model penjualan dalam skema bintang dan kepingan salju.

Skema Bintang



Karakteristik yang paling jelas dari skema bintang adalah bahwa tabel dimensi tidak dinormalisasi. Pada model di atas, fact_sales tabel menyimpan data agregat yang dibuat dari basis data operasional kami. Tabel biru muda adalah tabel dimensi. Kami memutuskan untuk menggunakan lima dimensi ini karena kami perlu membuat laporan menggunakan mereka sebagai parameter. Granulasi di dalam setiap dimensi juga ditentukan oleh kebutuhan pelaporan kami.

Dari model ini, kita dapat dengan mudah melihat mengapa skema ini disebut 'skema bintang':terlihat seperti bintang, dengan tabel dimensi mengelilingi tabel fakta pusat.

Skema Kepingan Salju



Skema kepingan salju ini menyimpan data yang sama persis dengan skema bintang. Tabel fakta memiliki dimensi yang sama seperti pada contoh skema bintang. Perbedaan yang paling penting adalah bahwa tabel dimensi dalam skema kepingan salju dinormalisasi. Menariknya, proses normalisasi tabel dimensi disebut snowflaking.

Sekali lagi, secara visual skema kepingan salju mengingatkan kita pada namanya, dengan beberapa lapisan tabel dimensi menciptakan bentuk seperti kepingan salju yang tidak beraturan.

Perbedaan Pertama:Normalisasi

Seperti disebutkan, normalisasi adalah perbedaan utama antara skema bintang dan kepingan salju. Mengenai hal ini, ada beberapa hal yang perlu diketahui:

  • Skema kepingan salju akan menggunakan lebih sedikit ruang untuk menyimpan tabel dimensi. Ini karena sebagai aturan, basis data yang dinormalisasi menghasilkan jauh lebih sedikit catatan redundan.
  • Model data yang didenormalisasi meningkatkan kemungkinan masalah integritas data. Masalah ini juga akan memperumit modifikasi dan pemeliharaan di masa mendatang.
  • Untuk pemodel data berpengalaman, skema kepingan salju tampaknya lebih terorganisir secara logis daripada skema bintang. (Ini adalah pendapat pribadi saya, bukan fakta yang sulit. :) )

Mari beralih ke perbedaan utama kedua antara kedua skema ini.

Perbedaan Kedua:Kompleksitas Kueri

Dalam dua artikel pertama kami, kami mendemonstrasikan kueri yang dapat digunakan pada model penjualan untuk mendapatkan jumlah semua produk tipe telepon yang dijual di toko Berlin pada tahun 2016.

Kueri skema bintang terlihat seperti ini:

SELECT 
  dim_store.store_address,
  SUM(fact_sales.quantity) AS quantity_sold

FROM 
  fact_sales
  INNER JOIN dim_product ON fact_sales.product_id = dim_product.product_id
  INNER JOIN dim_time ON fact_sales.time_id = dim_time.time_id
  INNER JOIN dim_store ON fact_sales.store_id = dim_store.store_id

WHERE 
  dim_time.action_year = 2016
  AND dim_store.city = 'Berlin'
  AND dim_product.product_type = 'phone'

GROUP BY 
  dim_store.store_id,
  dim_store.store_address

Untuk mendapatkan hasil yang sama dari skema kepingan salju, kita harus menggunakan kueri ini:

SELECT 
  dim_store.store_address,
  SUM(fact_sales.quantity) AS quantity_sold

FROM 
  fact_sales
  INNER JOIN dim_product ON fact_sales.product_id = dim_product.product_id
  INNER JOIN dim_product_type ON dim_product.product_type_id = dim_product_type.product_type_id
  INNER JOIN dim_time ON fact_sales.time_id = dim_time.time_id
  INNER JOIN dim_year ON dim_time.year_id = dim_year.year_id
  INNER JOIN dim_store ON fact_sales.store_id = dim_store.store_id
  INNER JOIN dim_city ON dim_store.city_id = dim_city.city_id

WHERE 
  dim_year.action_year = 2016
  AND dim_city.city = 'Berlin'
  AND dim_product_type.product_type_name = 'phone'

GROUP BY 
  dim_store.store_id,
  dim_store.store_address

Jelas, kueri skema kepingan salju lebih kompleks. Karena tabel dimensi dinormalisasi, kita perlu menggali lebih dalam untuk mendapatkan nama jenis produk dan kotanya. Kita harus menambahkan GABUNG lain untuk setiap level baru di dalam dimensi yang sama.

Dalam skema bintang, kita hanya menggabungkan tabel fakta dengan tabel dimensi yang kita butuhkan. Paling-paling, kita hanya akan memiliki satu GABUNG per tabel dimensi. Dan jika kita tidak menggunakan tabel dimensi, kita bahkan tidak perlu repot dengannya. Dalam kueri skema kepingan salju, kami tidak tahu seberapa dalam yang harus kami tempuh untuk mendapatkan tingkat dimensi yang tepat, sehingga memperumit proses penulisan kueri.

Menggabungkan dua tabel membutuhkan waktu karena DMBS membutuhkan waktu lebih lama untuk memproses permintaan. dim_store dan dim_city tabel ditempatkan berdekatan dalam model kami, tetapi mereka mungkin tidak ditempatkan di dekat satu sama lain pada disk. Ada kemungkinan yang lebih baik bahwa data akan lebih dekat secara fisik pada disk jika berada di dalam tabel yang sama.

Pada dasarnya, kueri yang dijalankan terhadap data mart skema kepingan salju akan dieksekusi lebih lambat. Namun dalam kebanyakan kasus, ini tidak akan menimbulkan masalah:tidak masalah jika kita mendapatkan hasilnya dalam satu milidetik atau satu detik.

Mempercepat Segalanya

Untuk mempercepat pelaporan, kami dapat:

  • Gabungkan data ke tingkat yang kami butuhkan dalam laporan. Ini akan memampatkan data secara signifikan. Kita perlu membuat prosedur yang akan mengubah data langsung kita agar sesuai dengan struktur skema pelaporan (proses ETL).
  • Bangun area penyimpanan pusat untuk semua data agregat perusahaan, bukan hanya data penjualan.
  • Hanya berikan data yang dibutuhkan pengguna untuk analisis dan laporan.

Skema Kepingan Salju vs. Bintang:Mana yang Harus Anda Gunakan?

Sekarang setelah kita melihat teori dan kecepatan kueri, mari kita langsung ke inti masalahnya:bagaimana Anda tahu skema mana yang akan digunakan pada proyek tertentu?

Pertimbangkan untuk menggunakan skema kepingan salju :

  • Di gudang data. Karena gudang adalah Pusat Data bagi perusahaan, kami dapat menghemat banyak ruang dengan cara ini.
  • Saat tabel dimensi membutuhkan ruang penyimpanan yang signifikan. Dalam kebanyakan kasus, tabel fakta akan menjadi tabel yang mengambil sebagian besar ruang. Mereka mungkin juga akan tumbuh lebih cepat daripada tabel dimensi. Tetapi ada situasi tertentu di mana itu tidak berlaku. Misalnya, tabel dimensi dapat berisi banyak atribut yang berlebihan tetapi dibutuhkan. Dalam contoh kami, kami menggunakan kota atribut untuk menggambarkan kota tempat toko berada. Bagaimana jika kita menginginkan gambaran kota yang lebih detail, termasuk jumlah penduduk, kode pos, data demografi, dll? Menjelaskan subdimensi lain – misalnya, toko , wilayah , negara bagian dan negara – dengan lebih banyak atribut akan mengubah dim_store tabel dimensi menjadi satu tabel besar dengan banyak redundansi.
  • Jika Anda menggunakan alat yang memerlukan skema kepingan salju di latar belakang. (Untungnya, sebagian besar alat modern mendukung skema dan bahkan skema galaksi.)

Pertimbangkan untuk menggunakan skema bintang :

  • Di data mart. Data mart adalah bagian dari data yang diambil dari gudang data pusat. Mereka biasanya dibuat untuk departemen yang berbeda dan bahkan tidak berisi semua data riwayat. Dalam pengaturan ini, menghemat ruang penyimpanan bukanlah prioritas.

    Di sisi lain, skema bintang memang menyederhanakan analisis. Ini bukan hanya tentang efisiensi kueri tetapi juga tentang menyederhanakan tindakan di masa mendatang untuk pengguna bisnis. Mereka mungkin memahami basis data dan tahu cara menulis kueri, tetapi mengapa memperumit masalah dan menyertakan lebih banyak gabungan jika kita dapat menghindarinya? Pengguna bisnis dapat memiliki kueri template yang menggabungkan tabel fakta dengan semua tabel dimensi. Kemudian mereka hanya perlu menambahkan pilihan dan pengelompokan yang sesuai. (Pendekatan ini mirip dengan tabel pivot Excel.)

  • Jika Anda menggunakan alat yang memerlukan skema bintang di latar belakang. (Sekali lagi, ini biasanya tidak menjadi masalah.)

Baik skema bintang dan skema kepingan salju adalah model relasional yang digunakan untuk mengatur gudang data dan/atau data mart. Tidak peduli seberapa mirip mereka, mereka menunjukkan dua pendekatan yang berbeda dan memiliki kelebihan dan kekurangannya sendiri. Secara pribadi, saya akan menggunakan skema kepingan salju saat menerapkan gudang data (untuk menghemat ruang penyimpanan) dan dengan skema bintang untuk data mart (untuk membuat hidup lebih mudah bagi pengguna bisnis).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tingkat Isolasi SNAPSHOT

  2. Bekerja dengan Data JDBC di Domo

  3. Menambahkan Lebih Banyak Penyimpanan Data ke Microsoft Power BI

  4. T-SQL vs SQL

  5. Apa Kegunaan Pernyataan SQL GROUP BY?