Post 10: Apa itu Normalisasi pada ERD

Apa itu Normalisasi pada ERD?

Normalisasi adalah proses mengorganisir data dalam database untuk mengurangi redundansi (duplikasi data) dan meningkatkan integritas data. Dalam konteks ERD (Entity Relationship Diagram), normalisasi membantu kita merancang struktur database yang efisien dengan memecah tabel-tabel besar menjadi tabel-tabel yang lebih kecil dan terstruktur dengan baik.

Tujuan Normalisasi

Anomali Data yang Terjadi Tanpa Normalisasi

1. Insert Anomaly (Anomali Penyisipan)

Tidak dapat menambahkan data baru tanpa informasi lengkap dari entitas lain.

Contoh: Tidak bisa menambah data mata kuliah baru jika belum ada mahasiswa yang mengambilnya.

2. Update Anomaly (Anomali Pembaruan)

Harus mengubah data di banyak tempat ketika ada perubahan, jika tidak konsisten akan terjadi inkonsistensi data.

Contoh: Jika nama jurusan berubah, harus update di semua record mahasiswa yang ada di jurusan tersebut.

3. Delete Anomaly (Anomali Penghapusan)

Menghapus data dapat menghilangkan informasi penting lainnya.

Contoh: Menghapus mahasiswa terakhir dari suatu mata kuliah dapat menghilangkan informasi tentang mata kuliah tersebut.

Bentuk Normal (Normal Forms)

1. First Normal Form (1NF) - Bentuk Normal Pertama

Aturan 1NF:

❌ Contoh Tabel yang TIDAK memenuhi 1NF

NIM Nama Mata_Kuliah Nilai
24416255201003 Gilang Ramadhan Basis Data, Web Programming A, B

Masalah: Kolom Mata_Kuliah dan Nilai berisi multiple values (tidak atomic)

✅ Tabel yang MEMENUHI 1NF

NIM Nama Mata_Kuliah Nilai
24416255201003 Gilang Ramadhan Basis Data A
24416255201003 Gilang Ramadhan Web Programming B

Solusi: Setiap baris sekarang memiliki satu nilai per kolom (atomic)

2. Second Normal Form (2NF) - Bentuk Normal Kedua

Aturan 2NF:

❌ Contoh Tabel yang TIDAK memenuhi 2NF

NIM Kode_MK Nama_Mahasiswa Nama_MK Nilai
24416255201003 TI101 Gilang Ramadhan Basis Data A
24416255201003 TI102 Gilang Ramadhan Web Programming B

Masalah:

  • Primary Key: (NIM, Kode_MK)
  • Nama_Mahasiswa hanya bergantung pada NIM (partial dependency)
  • Nama_MK hanya bergantung pada Kode_MK (partial dependency)

✅ Tabel yang MEMENUHI 2NF - Dipecah menjadi 3 tabel

Tabel MAHASISWA

NIM (PK) Nama_Mahasiswa
24416255201003 Gilang Ramadhan

Tabel MATA_KULIAH

Kode_MK (PK) Nama_MK
TI101 Basis Data
TI102 Web Programming

Tabel KRS

NIM (FK) Kode_MK (FK) Nilai
24416255201003 TI101 A
24416255201003 TI102 B
CREATE TABLE mahasiswa (
    nim VARCHAR(15) PRIMARY KEY,
    nama_mahasiswa VARCHAR(100)
);

CREATE TABLE mata_kuliah (
    kode_mk VARCHAR(10) PRIMARY KEY,
    nama_mk VARCHAR(100)
);

CREATE TABLE krs (
    nim VARCHAR(15),
    kode_mk VARCHAR(10),
    nilai CHAR(2),
    PRIMARY KEY (nim, kode_mk),
    FOREIGN KEY (nim) REFERENCES mahasiswa(nim),
    FOREIGN KEY (kode_mk) REFERENCES mata_kuliah(kode_mk)
);

3. Third Normal Form (3NF) - Bentuk Normal Ketiga

Aturan 3NF:

❌ Contoh Tabel yang TIDAK memenuhi 3NF

NIM Nama Kode_Jurusan Nama_Jurusan Gedung
24416255201003 Gilang TI Teknik Informatika Gedung A
24416255201004 Budi TI Teknik Informatika Gedung A

Masalah:

  • Primary Key: NIM
  • Nama_Jurusan bergantung pada Kode_Jurusan (bukan NIM)
  • Gedung bergantung pada Kode_Jurusan (bukan NIM)
  • Ini adalah transitive dependency: NIM → Kode_Jurusan → Nama_Jurusan

✅ Tabel yang MEMENUHI 3NF - Dipecah menjadi 2 tabel

Tabel JURUSAN

Kode_Jurusan (PK) Nama_Jurusan Gedung
TI Teknik Informatika Gedung A

Tabel MAHASISWA

NIM (PK) Nama Kode_Jurusan (FK)
24416255201003 Gilang TI
24416255201004 Budi TI
CREATE TABLE jurusan (
    kode_jurusan VARCHAR(5) PRIMARY KEY,
    nama_jurusan VARCHAR(100),
    gedung VARCHAR(50)
);

CREATE TABLE mahasiswa (
    nim VARCHAR(15) PRIMARY KEY,
    nama VARCHAR(100),
    kode_jurusan VARCHAR(5),
    FOREIGN KEY (kode_jurusan) REFERENCES jurusan(kode_jurusan)
);

Keuntungan:

  • ✅ Tidak ada redundansi data Nama_Jurusan dan Gedung
  • ✅ Update nama jurusan hanya di satu tempat
  • ✅ Bisa menambah jurusan baru tanpa harus ada mahasiswa

Perbandingan: Sebelum vs Sesudah Normalisasi

Studi Kasus: Sistem Akademik Kampus

❌ SEBELUM Normalisasi (Tidak Normal)

NIM Nama Jurusan Gedung MK1 Nilai1 MK2 Nilai2
001 Gilang TI A Basis Data A Web B

Masalah:

  • Repeated groups (MK1, MK2, dst)
  • Redundansi data Jurusan dan Gedung
  • Sulit menambah mata kuliah baru
  • Waste storage space

✅ SESUDAH Normalisasi (3NF)

JURUSAN ← 1:N → MAHASISWA ← 1:N → KRS ← N:1 → MATA_KULIAH

4 Tabel Terpisah:

  • JURUSAN (kode_jurusan, nama_jurusan, gedung)
  • MAHASISWA (nim, nama, kode_jurusan)
  • MATA_KULIAH (kode_mk, nama_mk, sks)
  • KRS (nim, kode_mk, semester, nilai)

Keuntungan:

  • ✅ Tidak ada redundansi data
  • ✅ Mudah maintenance
  • ✅ Fleksibel menambah data baru
  • ✅ Integritas data terjaga

Kapan Menggunakan Denormalisasi?

Meskipun normalisasi penting, kadang kita perlu melakukan denormalisasi (sengaja menambah redundansi) untuk:

  • Meningkatkan performa read: Mengurangi JOIN yang kompleks
  • Data warehouse: Untuk reporting dan analytics
  • Caching: Menyimpan data yang sering diakses
  • Read-heavy application: Aplikasi dengan banyak query SELECT

Pertimbangan: Denormalisasi meningkatkan kompleksitas maintenance dan risiko inkonsistensi data.

Langkah-langkah Normalisasi pada ERD

Step-by-Step Normalisasi:

  1. Identifikasi entitas: Tentukan objek-objek utama dalam sistem
  2. Terapkan 1NF: Pastikan semua attribute atomic dan tidak ada repeated groups
  3. Terapkan 2NF: Hilangkan partial dependency dengan memecah tabel
  4. Terapkan 3NF: Hilangkan transitive dependency
  5. Buat ERD: Gambarkan relasi antar entitas yang sudah dinormalisasi
  6. Validasi: Pastikan tidak ada anomali data
  7. Implementasi: Buat DDL SQL dari ERD yang sudah dinormalisasi

Best Practices Normalisasi

✅ Do's:

  • Selalu mulai dengan 1NF sebelum ke normal form selanjutnya
  • Dokumentasikan alasan setiap keputusan normalisasi
  • Gunakan naming convention yang konsisten
  • Buat foreign key constraints untuk integritas referensial
  • Test dengan data sample untuk memastikan tidak ada anomali

❌ Don'ts:

  • Jangan over-normalize hingga performa menurun drastis
  • Jangan lupakan business requirements
  • Jangan normalisasi tanpa memahami query patterns
  • Jangan abaikan performa untuk mencapai 3NF

Kesimpulan

Normalisasi adalah teknik fundamental dalam desain database yang membantu menciptakan struktur data yang efisien, konsisten, dan mudah dimaintain. Dengan memahami 1NF, 2NF, dan 3NF, Anda dapat merancang ERD yang baik dan menghindarkan database dari anomali data. Normalisasi adalah keseimbangan antara efisiensi storage, integritas data, dan performa query. Tonton video tutorial di atas untuk pemahaman yang lebih mendalam tentang normalisasi database!

← Kembali ke Beranda