Denormalization
Teknik sengaja menduplikasi data atau menggabungkan tabel untuk mengurangi kebutuhan JOIN, sehingga query baca jadi lebih cepat, tapi dengan trade-off: storage lebih besar dan proses update lebih kompleks.
Apa itu Denormalization?
Di pelajaran database, kita diajarkan untuk Normalisasi: pecah data jadi tabel-tabel terpisah untuk hindari duplikasi. Tapi dunia nyata sering nggak sesederhana itu. Denormalization adalah kebalikannya, yaitu sengaja menggabungkan kembali atau menduplikasi data untuk tujuan performa.
Bukan berarti Denormalization itu 'buruk' atau mengabaikan best practice. Ini adalah trade-off yang disengaja: kamu mau bayar dengan ruang penyimpanan lebih besar dan kompleksitas update, supaya dapat kecepatan baca yang jauh lebih baik.
Normalization vs Denormalization
| Aspek | Normalized | Denormalized |
|---|---|---|
| Struktur data | Tersebar di banyak tabel terpisah | Digabungkan, ada duplikasi yang disengaja |
| JOIN saat query | Banyak JOIN dibutuhkan | Minimal atau tanpa JOIN |
| Kecepatan baca | Lebih lambat (banyak JOIN) | Lebih cepat |
| Kecepatan tulis | Lebih cepat (satu tempat) | Lebih lambat (update banyak tempat) |
| Konsistensi data | Lebih mudah dijaga | Perlu mekanisme sinkronisasi ekstra |
| Cocok untuk | OLTP (transaksi harian) | OLAP (analitik), Data Warehouse |
Kapan Denormalization Masuk Akal?
Ada beberapa skenario di mana Denormalization adalah pilihan yang tepat:
Query lambat karena banyak JOIN: Kalau query analitik kamu involve 5-6 tabel JOIN dan sudah dioptimasi dengan index tapi masih lambat, denormalization bisa jadi jawaban.
Data Warehouse dan OLAP: Di konteks analitik, schema denormalized seperti Star Schema atau Flat Table memang standar. BigQuery, Redshift, dan Snowflake sering dipakai dengan tabel yang sudah di-flatten.
Read-Heavy Workload: Kalau ratio baca vs tulis di sistem kamu 99:1, bikin proses tulis sedikit lebih lambat demi baca yang jauh lebih cepat adalah pertukaran yang masuk akal.
Teknik yang Umum Dipakai
Stored Derived Data: Simpan hasil perhitungan yang sering dibutuhkan langsung di tabel. Misalnya total_order per user disimpan di tabel users, jadi nggak perlu hitung ulang tiap query.
Pre-JOIN Table: Buat tabel baru yang sudah gabungan dari beberapa tabel, di-refresh secara berkala lewat batch job atau materialized view.
Flattening Hierarchy: Tabel yang nested, misalnya kategori dan subkategori, dijadikan flat dengan kolom kategori_nama langsung di tabel produk.
Udah paham Denormalization? Lanjut latihan SQL dan Excel yuk!
Latihan interaktif, langsung di browser.