Proses normalisasi hingga bentuk normal ke-3 (3NF)

From OnnoWiki
Revision as of 09:03, 13 April 2025 by Onnowpurbo (talk | contribs) (Created page with "Berikut adalah **Modul 4: Normalisasi dan Desain Skema Relasional**, dengan fokus pada **proses normalisasi hingga bentuk normal ke-3 (3NF)**, disertai **contoh implementasi d...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Berikut adalah **Modul 4: Normalisasi dan Desain Skema Relasional**, dengan fokus pada **proses normalisasi hingga bentuk normal ke-3 (3NF)**, disertai **contoh implementasi di MySQL Ubuntu 24.04**.

---

    1. **🧠 Modul 4: Normalisasi dan Desain Skema Relasional**
      1. 🎯 Tujuan Pembelajaran

Setelah mempelajari modul ini, mahasiswa mampu: - Menjelaskan proses normalisasi dari UNF hingga 3NF - Mengidentifikasi ketergantungan fungsional - Mengimplementasikan hasil normalisasi ke dalam MySQL

---

    1. **4.1 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.

---

    1. **4.2 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).

---

    1. **4.3 Proses Menuju 1NF (First Normal Form)**
      1. 🔧 Aturan 1NF:

- Setiap kolom harus memiliki nilai atomik (tidak berisi list atau grup) - Tidak ada data berulang

      1. ✅ 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**.

---

    1. **4.4 Menuju 2NF (Second Normal Form)**
      1. 🔧 Aturan 2NF:

- Sudah dalam 1NF - Semua atribut non-primer harus **bergantung penuh** pada kunci utama

      1. ✅ Solusi:

Pisahkan tabel berdasarkan ketergantungan: - Tabel Mahasiswa - Tabel Mata Kuliah - Tabel Relasi Mahasiswa-Matkul

---

    1. **4.5 Menuju 3NF (Third Normal Form)**
      1. 🔧 Aturan 3NF:

- Sudah dalam 2NF - Tidak ada **ketergantungan transitif** (atribut non-primer tergantung pada non-primer lainnya)

      1. ✅ Solusi:

Pisahkan entitas dosen menjadi tabel terpisah.

---

    1. **4.6 Implementasi MySQL (Ubuntu 24.04)**

Berikut adalah skrip SQL berdasarkan hasil normalisasi hingga 3NF:

      1. 🔹 Tabel Mahasiswa

```sql CREATE TABLE mahasiswa (

   nim VARCHAR(10) PRIMARY KEY,
   nama VARCHAR(100),
   prodi VARCHAR(100)

); ```

      1. 🔹 Tabel Dosen

```sql CREATE TABLE dosen (

   id_dosen INT PRIMARY KEY,
   nama_dosen VARCHAR(100)

); ```

      1. 🔹 Tabel Mata Kuliah

```sql 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)

); ```

      1. 🔹 Tabel Pengambilan (relasi Mahasiswa - Matkul)

```sql 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)

); ```

---

    1. **4.7 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 |

---

Kalau kamu mau sekalian saya buatin versi **ER Diagram hasil dari 3NF** atau skrip SQL dump `.sql` lengkap biar tinggal di-import ke MySQL Ubuntu 24.04, tinggal bilang aja ya!