Second Normal Form (2NF)
Syarat 2NF:
- Sudah memenuhi 1NF
- Semua kolom non-key bergantung pada seluruh primary key, bukan hanya sebagian (no partial dependency)
Partial Dependency
Terjadi ketika primary key terdiri dari lebih dari satu kolom (composite key), dan ada kolom yang hanya bergantung pada sebagian dari composite key tersebut.
Contoh Melanggar 2NF
-- ❌ Melanggar 2NF
-- PK: (student_id, course_id)
-- student_name hanya bergantung pada student_id, bukan course_id
| student_id | course_id | student_name | grade |
|------------|-----------|--------------|-------|
| 1 | 101 | Budi | A |
| 1 | 102 | Budi | B |
| 2 | 101 | Siti | A |
Solusi: Memenuhi 2NF
-- ✅ Memenuhi 2NF: pisahkan partial dependency
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
CREATE TABLE enrollments (
student_id INT REFERENCES students(id),
course_id INT REFERENCES courses(id),
grade CHAR(1),
PRIMARY KEY (student_id, course_id)
);
Kapan 2NF Relevan?
2NF terutama relevan ketika tabel menggunakan composite primary key. Jika primary key hanya satu kolom (seperti auto-increment id), tabel yang memenuhi 1NF biasanya otomatis memenuhi 2NF.