Apa itu Star Schema
Star schema adalah teknik pemodelan database yang digunakan dalam data warehousing. Teknik ini mengorganisasi data ke dalam sebuah tabel terpusat yang disebut tabel fakta yang dikelilingi oleh beberapa tabel dimensi. Dalam star schema, tabel fakta mengandung data kuantitatif, seperti pendapatan penjualan atau unit produk yang terjual, sementara tabel dimensi memberikan konteks bagi data tersebut, seperti pelanggan yang melakukan pembelian atau periode waktu di mana penjualan terjadi.
Star Schema: Still Relevant Almost 30 years Later?
Salah satu keuntungan utama dari menggunakan star schema adalah kesederhanaannya dan kemudahan penggunaannya. Karena data diorganisir ke dalam struktur yang sederhana dan intuitif, mudah bagi analis dan pengguna bisnis untuk memahami dan mengakses data. Hal ini memudahkan untuk melakukan kueri dan analisis yang kompleks pada data, sehingga menghasilkan wawasan bisnis yang lebih berharga dan dapat diambil tindakan.
Keuntungan lain dari menggunakan star schema adalah kemampuannya untuk meningkatkan kinerja kueri. Dengan mengorganisir data ke dalam star schema, kueri dapat dioptimalkan untuk kecepatan dan efisiensi, sehingga memungkinkan waktu respon yang lebih cepat dan pengambilan keputusan yang lebih tepat waktu.
Perlu dicatat bahwa star schema adalah jenis teknik pemodelan dimensi tertentu. Pemodelan dimensi adalah pendekatan yang lebih luas dalam pemodelan data yang bertujuan untuk menciptakan struktur yang dioptimalkan untuk kueri dan analisis. Star schema adalah salah satu jenis teknik pemodelan dimensi yang umum digunakan dalam data warehousing, tetapi ada juga jenis teknik pemodelan dimensi lainnya, seperti skema snowflake dan skema konstelasi fakta.
Merancang Star Schema
Merancang star schema melibatkan mengidentifikasi fakta dan dimensi dari data, membuat tabel fakta dan tabel dimensi, dan membangun hubungan antara keduanya. Berikut adalah contoh cara merancang star schema untuk perusahaan e-commerce fiksi.
Mengidentifikasi Fakta dan Dimensi
Langkah pertama dalam merancang star schema adalah mengidentifikasi fakta dan dimensi. Untuk perusahaan e-commerce, fakta mungkin meliputi pendapatan penjualan, jumlah pesanan, dan pengembalian produk. Dimensi mungkin meliputi waktu, produk, pelanggan, dan lokasi.
Membuat Tabel Fakta
Tabel fakta adalah tabel pusat dalam star schema yang berisi data kuantitatif. Dalam contoh ini, kita akan membuat tabel fakta yang disebut sales_fact_table
yang berisi pendapatan penjualan dan jumlah pesanan.
CREATE TABLE sales_fact_table (
order_id INT,
product_id INT,
customer_id INT,
time_id INT,
location_id INT,
revenue DECIMAL(10,2),
orders INT
);
Membuat Tabel Dimensi
Tabel dimensi memberikan konteks untuk data di dalam tabel fakta. Dalam contoh ini, kita akan membuat tabel dimensi untuk produk, pelanggan, lokasi, dan waktu.
CREATE TABLE product_dim_table (
product_id INT,
product_name VARCHAR(50),
category VARCHAR(50)
);
CREATE TABLE customer_dim_table (
customer_id INT,
customer_name VARCHAR(50),
customer_email VARCHAR(50),
customer_address VARCHAR(100)
);
CREATE TABLE location_dim_table (
location_id INT,
location_name VARCHAR(50),
city VARCHAR(50),
state VARCHAR(50)
);
CREATE TABLE time_dim_table (
time_id INT,
date DATE,
month INT,
year INT
);
Membuat Relasi
Setelah tabel fakta dan dimensi dibuat, relasi antara mereka harus dibuat. Dalam contoh ini, relasi antara tabel fakta dan tabel dimensi dibuat melalui penggunaan foreign key.
ALTER TABLE sales_fact_table ADD FOREIGN KEY (product_id) REFERENCES product_dim_table(product_id);
ALTER TABLE sales_fact_table ADD FOREIGN KEY (customer_id) REFERENCES customer_dim_table(customer_id);
ALTER TABLE sales_fact_table ADD FOREIGN KEY (location_id) REFERENCES location_dim_table(location_id);
ALTER TABLE sales_fact_table ADD FOREIGN KEY (time_id) REFERENCES time_dim_table(time_id);
Berikut ini adalah contoh tampilan star schema dengan data sampel:
- Tabel Fakta Penjualan:
Order ID | Product ID | Customer ID | Time ID | Location ID | Revenue | Orders |
---|---|---|---|---|---|---|
1 | 101 | 1001 | 1 | 1 | 500.00 | 2 |
2 | 102 | 1002 | 2 | 2 | 250.00 | 1 |
3 | 103 | 1003 | 3 | 3 | 1000.00 | 5 |
- Tabel Dimensi Produk:
Product ID | Product Name | Category |
---|---|---|
101 | Product A | Electronics |
102 | Product B | Clothing |
103 | Product C | Home |
- Tabel Dimensi Pelanggan:
Customer ID | Customer Name | Customer Email | Customer Address |
---|---|---|---|
1001 | John Smith | john@smith.com | 123 Main Street |
1002 | Jane Doe | jane@doe.com | 456 Maple |
Querying Star Schema
Menggunakan SQL untuk mengambil informasi yang berguna dari tabel faktor dan dimensi disebut querying star schema. Berikut beberapa contoh lain cara meng-query star schema untuk perusahaan fiksi e-commerce.
Mengelompokkan dan Mengagregasi Data
Mengelompokkan dan mengagregasi data merupakan teknik umum yang digunakan dalam querying star schema. Ini melibatkan menghitung statistik ringkasan seperti jumlah, rata-rata, dan hitungan, dan mengelompokkan data berdasarkan satu atau lebih dimensi.
Contoh: Menghitung Total Penjualan per Bulan
Pada contoh ini, kita akan menghitung total pendapatan penjualan untuk setiap bulan.
SELECT time_dim_table.month, SUM(sales_fact_table.revenue) as total_sales
FROM sales_fact_table
JOIN time_dim_table ON sales_fact_table.time_id = time_dim_table.time_id
GROUP BY time_dim_table.month;
Output:
Month | Total Sales |
---|---|
1 | 5000.00 |
2 | 7500.00 |
3 | 10000.00 |
Contoh: Rata-rata Penjualan per Segmen Pelanggan
Pada contoh ini, kita akan menghitung rata-rata pendapatan penjualan untuk setiap segmen pelanggan.
SELECT customer_dim_table.customer_segment, AVG(sales_fact_table.revenue) as avg_sales
FROM sales_fact_table
JOIN customer_dim_table ON sales_fact_table.customer_id = customer_dim_table.customer_id
GROUP BY customer_dim_table.customer_segment;
Output:
Customer Segment | Average Sales |
---|---|
New Customers | 750.00 |
Returning Customers | 1000.00 |
Menangani Analisis Berbasis Waktu
Analisis berbasis waktu adalah kasus penggunaan umum untuk querying star schema. Ini melibatkan menganalisis tren dan pola dari waktu ke waktu, seperti pertumbuhan dari tahun ke tahun dan rata-rata bergerak.
Contoh: Pertumbuhan Penjualan dari Tahun ke Tahun
Pada contoh ini, kita akan menghitung pertumbuhan penjualan dari tahun ke tahun untuk setiap bulan.
SELECT t1.month, SUM(t1.revenue) as current_year_sales, SUM(t2.revenue) as last_year_sales,
(SUM(t1.revenue) - SUM(t2.revenue)) / SUM(t2.revenue) as yoy_growth
FROM sales_fact_table t1
JOIN sales_fact_table t2 ON t1.product_id = t2.product_id AND t1.time_id = t2.time_id
JOIN time_dim_table ON t1.time_id = time_dim_table.time_id
WHERE time_dim_table.year = 2022 AND t2.year = 2021
GROUP BY t1.month;
Output:
Month | Current Year Sales | Last Year Sales | YoY Growth |
---|---|---|---|
1 | 5000.00 | 4000.00 | 0.25 |
2 | 7500.00 | 6000.00 | 0.25 |
3 | 10000.00 | 8000.00 | 0.25 |
Contoh: Rata-rata Bergerak pada Penjualan
Pada contoh ini, kita akan menghitung rata-rata bergerak dari pendapatan penjualan selama periode tiga bulan.
SELECT time_dim_table.month, AVG(sales_fact_table.revenue) OVER (ORDER BY time_dim_table.month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as moving_average
FROM sales_fact_table
JOIN time_dim_table ON sales_fact_table.time_id = time_dim_table.time_id;
Output:
Month | Moving Average |
---|---|
1 | 5000.00 |
2 | 6250.00 |
3 | 750 |
Referensi