KuloDev
1 Hari
0 XP
intermediate35 menitModul: 03-database-design-and-optimization

Perancangan Skema Database, ERD & Normalisasi (1NF-3NF)

Pelajari cara merancang skema relasional yang rapi, relasi 1:1, 1:N, N:M (Junction Tables), serta aturan normalisasi 1NF, 2NF, dan 3NF untuk mencegah redundansi.

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).

Pola Menghafal Cepat 3NF
"Every non-key attribute must provide a fact about the key, the whole key, and nothing but the key, so help me Codd." (Setiap kolom harus bergantung pada kunci, seluruh kunci, dan hanya pada kunci).

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

query.sql
sql
1-- 1. Tabel Utama A: Users (Siswa)
2CREATE 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)
8CREATE 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)
14CREATE 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);

Selesaikan Materi Ini?

Dapatkan +25 XP dan simpan progres belajarmu.