Normalisasi hingga 3NF
Bentuk normal pertama, kedua, dan ketiga beserta anomali yang dihilangkannya.
Normalisasi hingga 3NF adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Coding Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Coding Interview Prep mencakup 4 pelajaran total.
Mengapa Pewawancara Menanyakan Normalisasi
Normalisasi adalah landasan fundamental pemodelan basis data, dan pewawancara menggunakannya untuk menguji apakah Anda memahami integritas data pada tingkat perancangan. Pertanyaannya sering terdengar seperti: "Apa itu normalisasi dan mengapa hal itu penting?"
Normalisasi adalah proses mengatur kolom dan tabel untuk mengurangi redundansi serta mencegah anomali pembaruan, penyisipan, dan penghapusan. Setiap bentuk normal (1NF, 2NF, 3NF) menambahkan aturan yang lebih ketat.
Jawaban yang baik menyebutkan anomali yang dihilangkan normalisasi, bukan sekadar definisi dari buku teks.
Tiga Anomali
Sebelum mempelajari bentuk normal, pelajarilah masalah yang diselesaikannya. Tabel yang dirancang dengan buruk dan menyimpan semuanya di satu tempat akan mengalami tiga anomali:
- Anomali pembaruan: fakta yang sama disimpan di banyak baris, sehingga perubahan harus diterapkan pada semuanya atau data menjadi tidak konsisten.
- Anomali penyisipan: Anda tidak dapat menambahkan suatu fakta tanpa memasukkan data lain yang tidak berkaitan (misalnya, tidak dapat menambahkan produk tanpa pesanan).
- Anomali penghapusan: menghapus satu baris secara tidak sengaja menghapus fakta independen lainnya.
Jika Anda dapat menemukan anomali ini dalam tabel contoh, Anda dapat membenarkan setiap langkah normalisasi.
Tabel Awal yang Belum Dinormalisasi
Berikut contoh klasik dalam wawancara: satu tabel lebar yang mencampurkan pesanan, pelanggan, dan produk. Perhatikan email pelanggan dan harga produk yang berulang di berbagai baris. Di sinilah anomali berada.
Tugas Anda dalam wawancara adalah menormalisasi tabel ini hingga 3NF sambil menjelaskan setiap pemisahan.
-- Unnormalized: everything in one table
CREATE TABLE orders_flat (
order_id INT,
customer_id INT,
customer_email VARCHAR(255),
product_id INT,
product_name VARCHAR(100),
unit_price DECIMAL(10,2),
quantity INT
);Bentuk Normal Pertama (1NF)
1NF mengharuskan setiap kolom berisi satu nilai atomik dan tidak memiliki kelompok berulang atau larik di dalam sel.
Tabel melanggar 1NF jika suatu kolom menyimpan daftar yang dipisahkan koma seperti 'phone1, phone2' atau jika Anda memiliki kolom product1, product2, product3.
Solusinya: tempatkan setiap nilai pada barisnya sendiri. Pewawancara ingin mendengar "nilai atomik, tanpa kelompok berulang, dan kunci yang mengidentifikasi setiap baris."
-- Violates 1NF: a list inside one column
-- phones = '555-1111, 555-2222'
-- 1NF fix: one phone per row
CREATE TABLE customer_phone (
customer_id INT,
phone VARCHAR(20),
PRIMARY KEY (customer_id, phone)
);Ketergantungan Fungsional
Untuk menjelaskan 2NF dan 3NF, Anda harus menggunakan istilah ketergantungan fungsional. Kita menulis A -> B untuk berarti "A menentukan B": untuk setiap nilai A, terdapat tepat satu nilai B.
Pada tabel orders kita:
customer_id -> customer_emailproduct_id -> product_name, unit_priceorder_id, product_id -> quantity
Normalisasi sebenarnya bertujuan memastikan setiap kolom yang bukan kunci bergantung pada seluruh kunci, dan tidak pada apa pun selain kunci.
Bentuk Normal Kedua (2NF)
2NF berlaku ketika kunci primer bersifat komposit. Bentuk ini melarang kolom yang bukan kunci bergantung hanya pada sebagian kunci tersebut (ketergantungan parsial).
Kunci baris pesanan kita adalah (order_id, product_id). Namun, product_name dan unit_price hanya bergantung pada product_id, bukan pada keseluruhan kunci. Itu adalah ketergantungan parsial, sehingga melanggar 2NF.
Solusinya: pindahkan atribut produk ke tabel products yang menggunakan product_id sebagai kuncinya.
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100),
unit_price DECIMAL(10,2)
);
CREATE TABLE order_items (
order_id INT,
product_id INT,
quantity INT,
PRIMARY KEY (order_id, product_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);Bentuk Normal Ketiga (3NF)
3NF menghapus ketergantungan transitif: kolom yang bukan kunci bergantung pada kolom lain yang bukan kunci, bukan langsung pada kunci.
Misalkan tabel orders memiliki customer_id dan customer_email. Di sini berlaku order_id -> customer_id -> customer_email. Email bergantung pada kunci hanya melalui customer_id, yaitu ketergantungan transitif.
Solusinya: pisahkan pelanggan ke tabelnya sendiri. Sekarang, kolom yang bukan kunci pada setiap tabel hanya bergantung pada kuncinya.
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_email VARCHAR(255)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);Alat Bantu Mengingat dalam Satu Baris
Pewawancara menyukai kandidat yang dapat merangkum 3NF dalam satu kalimat. Ungkapan klasiknya:
"Setiap kolom yang bukan kunci harus bergantung pada kunci, seluruh kunci, dan tidak pada apa pun selain kunci."
- Kunci -> 1NF (ada kunci, nilai atomik).
- Seluruh kunci -> 2NF (tidak ada ketergantungan parsial).
- Tidak pada apa pun selain kunci -> 3NF (tidak ada ketergantungan transitif).
Kalimat tunggal ini memungkinkan Anda membangun kembali ketiga bentuk normal kapan pun diperlukan.
BCNF: Pertanyaan Lanjutan
Pewawancara yang cermat mungkin menanyakan Bentuk Normal Boyce-Codd (BCNF), yaitu versi 3NF yang lebih ketat.
BCNF mengharuskan bahwa untuk setiap ketergantungan fungsional X -> Y, X harus merupakan superkunci. 3NF mengizinkan pengecualian yang jarang terjadi ketika atribut dependen merupakan bagian dari kunci kandidat; BCNF menghapus pengecualian tersebut.
Dalam praktik, Anda mungkin jarang menemukan pelanggaran BCNF, tetapi menyebutkannya dan mengatakan "BCNF adalah 3NF tanpa pengecualian untuk atribut prima" menunjukkan pemahaman yang mendalam.
Kapan NOT Melakukan Normalisasi
Jawaban tingkat senior mengakui adanya kompromi. Normalisasi meningkatkan integritas, tetapi dapat menurunkan performa pembacaan karena untuk menjawab kueri diperlukan lebih banyak penggabungan.
Denormalisasi yang dilakukan dengan sengaja dapat diterima ketika:
- Beban kerja didominasi pembacaan dan penggabungan menjadi hambatan.
- Anda sedang membangun lapisan analitik/pelaporan (skema bintang, yang akan dibahas nanti).
- Anda dapat menjaga salinan redundan tetap sinkron (pemicu, ETL, tampilan terwujud).
Katakan: "Lakukan normalisasi untuk integritas OLTP; lakukan denormalisasi dengan sengaja untuk kecepatan baca OLAP."
Mengerjakan di Papan Tulis
Satukan semuanya. Dalam wawancara langsung, ketika diberikan tabel yang berantakan:
- Nyatakan kunci kandidat dan buat daftar ketergantungan fungsional.
- Periksa atomisitas dan kelompok berulang (1NF).
- Jika kuncinya komposit, periksa ketergantungan parsial (2NF).
- Periksa ketergantungan antara kolom yang bukan kunci (3NF).
- Gambarkan tabel yang dihasilkan beserta kunci primer dan kunci asing.
Menjelaskan langkah-langkah ini dengan lantang adalah tepatnya yang dinilai oleh pewawancara.
Pemeriksaan Singkat
Uji pemahaman Anda tentang bentuk normal.
Rekap: Normalisasi hingga 3NF
Sekarang Anda dapat menjawab pertanyaan wawancara normalisasi yang umum dari awal sampai akhir:
- Normalisasi menghilangkan anomali pembaruan, penyisipan, dan penghapusan dengan mengurangi redundansi.
- 1NF: nilai atomik, tanpa kelompok berulang.
- 2NF: tidak ada ketergantungan parsial pada kunci komposit.
- 3NF: tidak ada ketergantungan transitif (antara kolom yang bukan kunci).
- Rangkum dengan "kunci, seluruh kunci, dan tidak pada apa pun selain kunci."
- BCNF memperketat 3NF; lakukan denormalisasi dengan sengaja untuk analitik yang didominasi pembacaan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Normalisasi hingga 3NF” gratis?
Ya — teks lengkap “Normalisasi hingga 3NF” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Coding Interview Prep, upgrade ke CoddyKit PRO. Kursus Coding Interview Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Normalisasi hingga 3NF”?
Bentuk normal pertama, kedua, dan ketiga beserta anomali yang dihilangkannya. Kamu berlatih Coding Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Coding Interview Prep?
Tidak diperlukan pengalaman sebelumnya. Coding Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Normalisasi hingga 3NF” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Coding Interview Prep ini?
Ya. Setiap pelajaran Coding Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Normalisasi hingga 3NF
- Pemodelan ER dan Kardinalitas Relasi
- Skema Bintang dan Desain Gudang Data
- Kumpulan Soal Simulasi Wawancara Lengkap