Pertemuan ke-7: Normalisasi dan Denormalisasi Database
Hari ini, kita akan belajar tentang normalisasi dan denormalisasi, dua konsep penting dalam desain database untuk meningkatkan efisiensi penyimpanan dan performa query.
1️⃣ Apa itu Normalisasi?
Normalisasi adalah proses mengorganisir data dalam database untuk menghindari redundansi dan inkonsistensi data.
➤ Manfaat Normalisasi:
✅ Mengurangi duplikasi data
✅ Memastikan integritas data
✅ Mempermudah perawatan database
➤ Bentuk Normalisasi (Normal Forms – NF)
PostgreSQL mengikuti standar normalisasi dari 1NF hingga 5NF, tetapi dalam praktiknya, 3NF biasanya sudah cukup.
| Normal Form | Aturan | Contoh |
|---|---|---|
| 1NF (First Normal Form) | Setiap kolom harus berisi nilai atomik (tidak terpecah) | 🚫 produk: 'Laptop, Mouse' ✅ produk: 'Laptop', produk: 'Mouse' |
| 2NF (Second Normal Form) | Harus memenuhi 1NF dan tidak ada ketergantungan parsial pada primary key | 🚫 order_id → customer_nama, customer_alamat (seharusnya ada tabel customer) |
| 3NF (Third Normal Form) | Harus memenuhi 2NF dan tidak ada ketergantungan transitif | 🚫 produk_id → kategori_nama, kategori_deskripsi (seharusnya ada tabel kategori) |
2️⃣ Studi Kasus Normalisasi
Misalnya, kita punya tabel transaksi seperti ini:
| transaksi_id | pelanggan_nama | pelanggan_email | produk | harga |
|---|---|---|---|---|
| 1 | John Doe | john@example.com | Laptop | 10.000.000 |
| 2 | John Doe | john@example.com | Mouse | 500.000 |
| 3 | Jane Smith | jane@example.com | Keyboard | 700.000 |
🚨 Masalah:
- Nama dan email pelanggan berulang di setiap transaksi.
- Jika pelanggan pindah email, harus update semua baris!
✅ Solusi: Normalisasi ke bentuk 3NF dengan memisahkan data ke tabel berikut:
Tabel Pelanggan
CREATE TABLE pelanggan (
pelanggan_id SERIAL PRIMARY KEY,
nama VARCHAR(100),
email VARCHAR(100) UNIQUE
);
Tabel Transaksi
CREATE TABLE transaksi (
transaksi_id SERIAL PRIMARY KEY,
pelanggan_id INT REFERENCES pelanggan(pelanggan_id),
produk VARCHAR(100),
harga NUMERIC(12,2)
);
Sekarang, jika ada perubahan data pelanggan, cukup update satu tabel! 🚀
3️⃣ Apa itu Denormalisasi?
Denormalisasi adalah kebalikan dari normalisasi. Tujuannya adalah mengurangi join yang kompleks dan meningkatkan kecepatan query.
➤ Kapan Menggunakan Denormalisasi?
🔹 Jika terlalu banyak JOIN memperlambat query.
🔹 Jika kita sering membaca data, tetapi jarang mengubahnya.
🔹 Jika kita perlu laporan cepat tanpa banyak pengolahan.
Contoh Denormalisasi:
CREATE TABLE laporan_transaksi (
transaksi_id SERIAL PRIMARY KEY,
pelanggan_nama VARCHAR(100),
pelanggan_email VARCHAR(100),
produk VARCHAR(100),
harga NUMERIC(12,2)
);
💡 Keuntungan: Query lebih cepat karena tidak perlu JOIN.
⚠️ Kelemahan: Jika email pelanggan berubah, semua baris harus diperbarui.
4️⃣ Tugas Praktik
1️⃣ Normalisasi tabel transaksi menjadi 3NF dengan memisahkan tabel pelanggan.
2️⃣ Coba buat query JOIN untuk melihat data transaksi dengan nama pelanggan.
3️⃣ Buat tabel denormalisasi untuk laporan transaksi cepat.
4️⃣ Bandingkan waktu eksekusi query pada tabel ter-normalisasi dan denormalisasi!
🎯 Kesimpulan
- Normalisasi mengurangi duplikasi dan memastikan integritas data.
- Denormalisasi mempercepat query dengan mengorbankan fleksibilitas data.
- Gunakan normalisasi jika data sering berubah dan denormalisasi jika performa query lebih diutamakan.
