Apa itu Denormalisasi?
Denormalisasi adalah proses yang berlawanan dengan normalisasi — menambahkan redundansi data secara sengaja untuk meningkatkan performa baca (read performance).
Mengapa Denormalisasi?
- Mengurangi JOIN — query lebih cepat karena data sudah ada di satu tabel
- Read-heavy workload — aplikasi yang lebih banyak membaca daripada menulis
- Reporting/Analytics — query aggregasi lebih efisien
Contoh Denormalisasi
-- Normalized (perlu JOIN)
SELECT o.id, o.total, u.name
FROM orders o
JOIN users u ON o.user_id = u.id;
-- Denormalized (tanpa JOIN, lebih cepat)
-- Tambahkan kolom customer_name langsung di orders
ALTER TABLE orders ADD COLUMN customer_name VARCHAR(100);
SELECT id, total, customer_name FROM orders;
Trade-offs
- Pro: Query lebih cepat, lebih sederhana
- Con: Data bisa tidak konsisten jika tidak di-update bersamaan
- Con: Storage lebih besar karena duplikasi
Teknik Denormalisasi Umum
-- 1. Computed column (counter cache)
ALTER TABLE users ADD COLUMN posts_count INT DEFAULT 0;
-- Update saat ada post baru, tidak perlu COUNT() setiap query
-- 2. Materialized view
CREATE MATERIALIZED VIEW monthly_sales AS
SELECT DATE_TRUNC('month', created_at) AS month,
SUM(total) AS revenue,
COUNT(*) AS order_count
FROM orders
GROUP BY month;
-- 3. JSON column untuk data yang sering diakses bersama
ALTER TABLE orders ADD COLUMN items_snapshot JSONB;
Kapan Denormalisasi?
Gunakan denormalisasi hanya setelah normalisasi, dan hanya jika ada bukti performa (benchmarks, slow query logs). Jangan denormalisasi secara prematur.