Dalam dunia basis data, dua konsep penting yang sering muncul adalah denormalisasi dan subquery. Keduanya memiliki peran berbeda: denormalisasi berkaitan dengan desain struktur tabel, sedangkan subquery berkaitan dengan cara kita menulis query SQL. Artikel ini akan membahas keduanya secara mendalam, termasuk contoh penerapan praktis.
Denormalisasi Database
Apa itu Denormalisasi?
Denormalisasi adalah proses menggabungkan tabel atau menambahkan data redundan dalam sebuah database untuk meningkatkan performa query. Berbeda dengan normalisasi yang bertujuan mengurangi duplikasi data, denormalisasi justru memperbolehkan adanya duplikasi demi efisiensi akses.
Tujuan Denormalisasi
- Meningkatkan performa query: Mengurangi jumlah JOIN antar tabel.
- Mempercepat laporan: Data yang sering digunakan bisa langsung tersedia.
- Mengurangi kompleksitas query: Struktur tabel lebih sederhana untuk kebutuhan tertentu.
Contoh Denormalisasi
Misalkan kita punya tabel Orders dan Customers.
Dalam desain normalisasi, nama pelanggan ada di tabel Customers.
Namun, dengan denormalisasi, kita bisa menambahkan kolom customer_name langsung ke tabel Orders agar laporan lebih cepat.
-- Tabel Orders setelah denormalisasi
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
customer_name VARCHAR(100), -- redundan, tapi mempercepat query
order_date DATE,
total_amount DECIMAL(10,2)
);
Kelebihan dan Kekurangan
| Kelebihan | Kekurangan |
|---|---|
| Query lebih cepat | Risiko inkonsistensi data |
| Struktur lebih sederhana | Membutuhkan ruang penyimpanan lebih besar |
| Cocok untuk data warehouse | Perlu mekanisme sinkronisasi tambahan |
Subquery dalam SQL
Apa itu Subquery?
Subquery adalah query di dalam query lain. Biasanya digunakan untuk mengambil data intermediate sebelum dipakai di query utama.
Jenis Subquery
-
Subquery dalam WHERE
Digunakan untuk membandingkan nilai dengan hasil query lain.SELECT name FROM Customers WHERE id IN (SELECT customer_id FROM Orders WHERE total_amount > 1000); -
Subquery dalam FROM (Derived Table)
Digunakan untuk membuat tabel sementara.SELECT AVG(total_amount) AS avg_order FROM (SELECT customer_id, SUM(total_amount) AS total_amount FROM Orders GROUP BY customer_id) AS summary; -
Subquery dalam SELECT
Digunakan untuk menampilkan hasil tambahan.SELECT name, (SELECT COUNT(*) FROM Orders WHERE Orders.customer_id = Customers.id) AS order_count FROM Customers;
Kelebihan Subquery
- Membuat query lebih modular dan mudah dibaca.
- Mengurangi kebutuhan JOIN yang kompleks.
- Cocok untuk perhitungan agregasi spesifik.
Kekurangan Subquery
- Bisa lebih lambat dibandingkan JOIN pada dataset besar.
- Sulit dioptimasi oleh query planner jika terlalu dalam.
Perbandingan Denormalisasi vs Subquery
| Aspek | Denormalisasi | Subquery |
|---|---|---|
| Fokus | Struktur tabel | Cara menulis query |
| Tujuan | Performa akses data | Modularisasi query |
| Risiko | Inkonsistensi data | Performa lambat |
| Cocok untuk | Data warehouse, laporan cepat | Query analisis, filter kompleks |
Kesimpulan
- Denormalisasi adalah strategi desain database untuk meningkatkan performa dengan menambahkan redundansi data.
- Subquery adalah teknik SQL untuk menyusun query kompleks secara modular.
- Keduanya bisa saling melengkapi: denormalisasi mempercepat akses data, sementara subquery memudahkan analisis data.