Ana içeriğe geç
Kesit SQL
İleri · Veri Modelleme

OLTP ve OLAP, yıldız şema, fact ve dimension

Analitik veri modellemenin temelleri (Kimball).

Uygulamada aç, 5 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

İki farklı dünya

OLTP (işlem)OLAP (analitik)
AmaçUygulamayı çalıştırmak: sipariş al, stok düşAnaliz ve raporlama
SorguÇok sayıda küçük okuma/yazmaAz sayıda büyük taramalı sorgu
TasarımNormalize (3NF)Denormalize (yıldız/kar tanesi)
DepolamaSatır tabanlıSütun tabanlı
ÖrnekPostgreSQL, MySQL, SQL ServerSnowflake, BigQuery, Redshift, ClickHouse

Yıldız şema (star schema)

Tanecik (grain): Fact tablosundaki bir satır tam olarak neyi temsil eder? “Bir sipariş satırı” mı, “günlük ürün özeti” mi? Modellemenin ilk ve en önemli kararıdır.

Anadolu Market için küçük bir yıldız

CREATE TABLE dim_date AS
SELECT DISTINCT order_date AS date_key,
       CAST(strftime('%Y', order_date) AS INTEGER) AS year,
       CAST(strftime('%m', order_date) AS INTEGER) AS month,
       FLOOR((CAST(strftime('%m', order_date) AS INTEGER) + 2) / 3) AS quarter
FROM orders;

CREATE TABLE fact_sales AS
SELECT o.order_date AS date_key, oi.product_id, o.customer_id,
       oi.quantity, oi.quantity * oi.unit_price * (1 - oi.discount) AS revenue
FROM orders o JOIN order_items oi ON oi.order_id = o.order_id
WHERE o.status = 'delivered';

SELECT d.year, d.quarter, ROUND(SUM(f.revenue)) AS ciro
FROM fact_sales f JOIN dim_date d ON d.date_key = f.date_key
GROUP BY d.year, d.quarter
ORDER BY d.year, d.quarter;
Alıştırmalara geç (5)