1. Apa itu Normalisasi Database?
Normalisasi adalah teknik sistematis untuk menstrukturkan tabel basis data relasional guna **mengurangi redundansi (duplikasi data)** dan **mencegah anomali** saat operasi INSERT, UPDATE, dan DELETE.
2. Tiga Bentuk Normalisasi Utama (1NF, 2NF, 3NF)
1. **1NF (First Normal Form)**: Setiap kolom harus bernilai tunggal (*atomic values*), tidak boleh ada array atau koma yang digabungkan dalam satu sel. 2. **2NF (Second Normal Form)**: Sudah memenuhi 1NF, dan semua kolom non-kunci harus bergantung sepenuhnya pada Primary Key utuh (tidak boleh *partial dependency* pada composite key). 3. **3NF (Third Normal Form)**: Sudah memenuhi 2NF, dan tidak boleh ada *transitive dependency* (kolom non-kunci tidak boleh bergantung pada kolom non-kunci lainnya).
3. Merancang Relasi Many-to-Many (N:M) dengan Junction Table
Satu siswa dapat mengambil banyak kursus, dan satu kursus dapat diikuti oleh banyak siswa. Relasi N:M dimodelkan menggunakan tabel perantara (*Junction Table / Pivot Table*).
| 1 | -- 1. Tabel Utama A: Users (Siswa) |
| 2 | CREATE TABLE students ( |
| 3 | id UUID PRIMARY KEY DEFAULT gen_random_uuid(), |
| 4 | name VARCHAR(100) NOT NULL |
| 5 | ); |
| 6 | |
| 7 | -- 2. Tabel Utama B: Courses (Kursus) |
| 8 | CREATE TABLE courses ( |
| 9 | id UUID PRIMARY KEY DEFAULT gen_random_uuid(), |
| 10 | title VARCHAR(150) NOT NULL |
| 11 | ); |
| 12 | |
| 13 | -- 3. Junction Table: Enrollments (Menghubungkan Many-to-Many) |
| 14 | CREATE TABLE enrollments ( |
| 15 | id UUID PRIMARY KEY DEFAULT gen_random_uuid(), |
| 16 | student_id UUID NOT NULL REFERENCES students(id) ON DELETE CASCADE, |
| 17 | course_id UUID NOT NULL REFERENCES courses(id) ON DELETE CASCADE, |
| 18 | enrolled_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| 19 | CONSTRAINT unique_student_course UNIQUE (student_id, course_id) |
| 20 | ); |