Proses normalisasi hingga bentuk normal ke-3 (3NF)
Tujuan Pembelajaran
Setelah mempelajari modul ini, mahasiswa mampu:
- Menjelaskan proses normalisasi dari UNF hingga 3NF
- Mengidentifikasi ketergantungan fungsional
- Mengimplementasikan hasil normalisasi ke dalam MySQL
Apa Itu Normalisasi?
Normalisasi adalah proses sistematis dalam desain database untuk mengurangi duplikasi data (redundansi) dan menghindari anomali data (insert, update, delete). Normalisasi dilakukan dalam beberapa bentuk normal (normal forms), dari bentuk awal (UNF) hingga bentuk normal ketiga (3NF) atau lebih.
Studi Kasus: Data Awal (UNF)
Misalkan kita punya data mahasiswa dan mata kuliah sebagai berikut:
NIM | Nama | Prodi | KodeMK | NamaMK | Dosen |
---|---|---|---|---|---|
101 | Andi | Informatika | MK001 | Basis Data | Dr. Budi |
101 | Andi | Informatika | MK002 | Algoritma | Dr. Siti |
102 | Budi | Informatika | MK001 | Basis Data | Dr. Budi |
> Masih dalam bentuk UNF: grup data berulang (multi-valued).
Proses Menuju 1NF (First Normal Form)
Aturan 1NF:
- Setiap kolom harus memiliki nilai atomik (tidak berisi list atau grup)
- Tidak ada data berulang
Hasil 1NF:
NIM | Nama | Prodi | KodeMK | NamaMK | Dosen |
---|---|---|---|---|---|
101 | Andi | Informatika | MK001 | Basis Data | Dr. Budi |
101 | Andi | Informatika | MK002 | Algoritma | Dr. Siti |
102 | Budi | Informatika | MK001 | Basis Data | Dr. Budi |
> Sudah atomik, tetapi masih ada redundansi.
Menuju 2NF (Second Normal Form)
Aturan 2NF:
- Sudah dalam 1NF
- Semua atribut non-primer harus bergantung penuh pada kunci utama
Solusi: Pisahkan tabel berdasarkan ketergantungan:
- Tabel Mahasiswa
- Tabel Mata Kuliah
- Tabel Relasi Mahasiswa-Matkul
Menuju 3NF (Third Normal Form)
Aturan 3NF:
- Sudah dalam 2NF
- Tidak ada ketergantungan transitif (atribut non-primer tergantung pada non-primer lainnya)
Solusi: Pisahkan entitas dosen menjadi tabel terpisah.
Implementasi MySQL (Ubuntu 24.04)
Berikut adalah skrip SQL berdasarkan hasil normalisasi hingga 3NF:
Tabel Mahasiswa
CREATE TABLE mahasiswa ( nim VARCHAR(10) PRIMARY KEY, nama VARCHAR(100), prodi VARCHAR(100) );
Tabel Dosen
CREATE TABLE dosen ( id_dosen INT PRIMARY KEY, nama_dosen VARCHAR(100) );
Tabel Mata Kuliah
CREATE TABLE mata_kuliah ( kode_mk VARCHAR(10) PRIMARY KEY, nama_mk VARCHAR(100), id_dosen INT, FOREIGN KEY (id_dosen) REFERENCES dosen(id_dosen) );
Tabel Pengambilan (relasi Mahasiswa * Matkul)
CREATE TABLE pengambilan ( nim VARCHAR(10), kode_mk VARCHAR(10), semester VARCHAR(10), PRIMARY KEY (nim, kode_mk), FOREIGN KEY (nim) REFERENCES mahasiswa(nim), FOREIGN KEY (kode_mk) REFERENCES mata_kuliah(kode_mk) );
Ringkasan Proses Normalisasi
Bentuk Normal | Tujuan | Aksi |
---|---|---|
UNF | Data mentah | Data masih berulang |
1NF | Atomisasi data | Hilangkan kolom dengan data jamak |
2NF | Ketergantungan fungsional penuh | Pisahkan data yang bergantung parsial terhadap key |
3NF | Hilangkan ketergantungan transitif | Pisahkan atribut non-primer yang tergantung non-key |