1. Tujuan Praktikum
Menghilangkan redundansi data, anomali penyisipan (insert anomaly), anomali penghapusan (delete anomaly), dan anomali pembaruan (update anomaly) pada perancangan database relasional sistem informasi akademik.
2. Studi Kasus: Tabel Unnormalized (UNF)
Bayangkan sebuah tabel laporan nilai mahasiswa yang belum dinormalisasi:
| NIM | Nama | Kode_MK | Nama_MK | SKS | Dosen | Ruang | Nilai |
|---|---|---|---|---|---|---|---|
| 230101 | Budi | MK01, MK02 | Web, IoT | 3, 3 | Pak Adi, Bu Siti | R1, R2 | A, B+ |
Masalah: Terdapat multi-valued attribute (satu kolom berisi banyak nilai sekaligus).
3. Tahapan Normalisasi
3.1. Bentuk Normal Pertama (1NF)
Syarat 1NF: Setiap sel atribut hanya boleh bernilai tunggal (atomic value) dan tidak ada repeating group.
Solusi: Pecah baris yang memiliki multi-value menjadi baris tersendiri:
-- Struktur tabel Mahasiswa_Nilai_1NF
-- Primary Key gabungan: (NIM, Kode_MK)
CREATE TABLE nilai_1nf (
nim VARCHAR(10),
nama_mhs VARCHAR(100),
kode_mk VARCHAR(10),
nama_mk VARCHAR(100),
sks INT,
dosen_pengampu VARCHAR(100),
nilai VARCHAR(2),
PRIMARY KEY (nim, kode_mk)
);
3.2. Bentuk Normal Kedua (2NF)
Syarat 2NF: Sudah memenuhi 1NF, dan tidak boleh ada partial dependency (ketergantungan parsial), di mana atribut non-key hanya bergantung pada sebagian Primary Key.
Analisis:
nama_mhshanya bergantung padanim(bukan padakode_mk).nama_mkdanskshanya bergantung padakode_mk(bukan padanim).
Solusi: Pecah menjadi 3 entitas terpisah:
Mahasiswa (NIM, Nama)Mata_Kuliah (Kode_MK, Nama_MK, SKS, Dosen)KRS_Nilai (NIM, Kode_MK, Nilai)
3.3. Bentuk Normal Ketiga (3NF)
Syarat 3NF: Sudah memenuhi 2NF, dan tidak boleh ada transitive dependency (ketergantungan transitif), di mana atribut non-key bergantung pada atribut non-key lainnya.
Analisis pada tabel Mata_Kuliah:
Jika satu dosen memiliki NIP dan No_Telp di tabel Mata Kuliah, maka No_Telp bergantung pada NIP, padahal NIP bukan primary key tabel Mata Kuliah.
Solusi 3NF: Buat tabel Dosen tersendiri:
mahasiswa (nim [PK], nama)dosen (nip [PK], nama_dosen, email)mata_kuliah (kode_mk [PK], nama_mk, sks, nip_dosen [FK])krs_nilai (id_krs [PK], nim [FK], kode_mk [FK], nilai)
4. DDL Skrip SQL Standar 3NF
CREATE TABLE dosen (
nip VARCHAR(20) PRIMARY KEY,
nama_dosen VARCHAR(100) NOT NULL
);
CREATE TABLE mata_kuliah (
kode_mk VARCHAR(10) PRIMARY KEY,
nama_mk VARCHAR(100) NOT NULL,
sks TINYINT NOT NULL,
nip_dosen VARCHAR(20),
FOREIGN KEY (nip_dosen) REFERENCES dosen(nip)
);
CREATE TABLE mahasiswa (
nim VARCHAR(10) PRIMARY KEY,
nama_mhs VARCHAR(100) NOT NULL
);
CREATE TABLE krs_nilai (
id INT AUTO_INCREMENT PRIMARY KEY,
nim VARCHAR(10) NOT NULL,
kode_mk VARCHAR(10) NOT NULL,
nilai CHAR(2),
FOREIGN KEY (nim) REFERENCES mahasiswa(nim),
FOREIGN KEY (kode_mk) REFERENCES mata_kuliah(kode_mk)
);
5. Referensi
- Silberschatz, A., Korth, H. F., & Sudarshan, S. (2020). Database System Concepts (7th Edition).
- Elmasri, R., & Navathe, S. B. (2015). Fundamentals of Database Systems.
