MagicAppBuilder Tech News

Denormalisasi Database dan Subquery: Konsep, Manfaat, dan Implementasi

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

  1. 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);
  2. 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;
  3. 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.