{count, plural, one {Kursus} other {Kursus}}
Saat bekerja dengan basis data, masalah seperti data yang berulang dan pembaruan yang tidak konsisten sering terjadi. Second normal form adalah langkah normalisasi basis data yang dibangun di atas first normal form (1NF) untuk membuat tabel yang lebih rapi dan efisien.
Memahami 2NF sangat penting bagi siapa pun yang bekerja dalam perancangan basis data atau manajemen data, dan menjadi fondasi bagi bentuk normalisasi yang lebih tinggi seperti third normal form (3NF). Dalam artikel ini, kita akan membahas cara kerja 2NF dan bagaimana mentransformasi tabel agar memenuhi persyaratan 2NF, disertai contoh praktis. Kita juga akan membahas manfaat dan kekurangan 2NF, serta kasus penggunaan yang paling sesuai.
Memahami Second Normal Form
Second normal form adalah langkah normalisasi basis data yang berfokus pada penghapusan ketergantungan parsial. Konsep ini diperkenalkan oleh Edgar F. Codd, pelopor basis data relasional, sebagai bagian dari karyanya tentang normalisasi.
Sebelum sebuah tabel dapat berada dalam 2NF, tabel tersebut harus memenuhi aturan first normal form:
- Atomisitas: Setiap sel harus berisi satu nilai tunggal (tanpa kelompok berulang atau array).
- Baris unik: Tabel harus memiliki kunci utama yang jelas.
2NF melangkah lebih jauh dengan aturan tambahan: hilangkan ketergantungan parsial.
Ketergantungan parsial terjadi ketika atribut non-prime (kolom yang bukan bagian dari kandidat kunci mana pun) bergantung pada sebagian dari kunci komposit, bukan pada keseluruhan kunci. Aturan 2NF memastikan bahwa semua atribut non-prime bergantung pada seluruh kunci utama, bukan hanya sebagian. Membiarkan ketergantungan parsial dalam sebuah tabel berarti data redundan dapat masuk ke basis data, menyebabkan ketidakefisienan dan potensi inkonsistensi saat pembaruan atau penghapusan.
Teori saja bisa terasa kering, jadi mari kita lihat contoh praktis.
Di bawah ini adalah tabel Pendaftaran Kursus untuk siswa Datacamp.
| ID Siswa | ID Kursus | Nama Kursus | Nama Instruktur |
|---|---|---|---|
| 1001 | 201 | SQL Fundamentals | Ken Smith |
| 1002 | 202 | Introduction to Python | Merlin O’Donnell |
| 1001 | 202 | Introduction to Python | Merlin O’Donnell |
Di sini, kunci utama adalah gabungan dari ID Siswa dan ID Kursus. Namun, atribut non-prime Nama Kursus dan Biaya Kursus hanya bergantung pada ID Kursus, bukan keseluruhan kunci. Ini melanggar 2NF.
Langkah-langkah Mendekomposisi Tabel untuk Mencapai 2NF
Untuk memastikan sebuah tabel mengikuti aturan 2NF, Anda perlu:
- Identifikasi Semua Kandidat Kunci: Tentukan himpunan atribut minimal yang mengidentifikasi baris secara unik dalam tabel. Inilah kandidat kunci Anda.
- Tentukan Ketergantungan Fungsional: Identifikasi semua ketergantungan fungsional dalam tabel. Secara khusus, cari ketergantungan di mana atribut non-prime (yang bukan bagian dari kandidat kunci mana pun) hanya bergantung pada sebagian dari kunci komposit.
- Hilangkan Ketergantungan Parsial: Untuk setiap ketergantungan parsial:
- Pindahkan atribut yang bergantung ke tabel baru bersama bagian kunci yang menjadi dependensinya.
- Pastikan tabel baru memiliki kunci utama yang unik.
- Ulangi Hingga Tidak Ada Ketergantungan Parsial yang Tersisa: Konfirmasikan bahwa setiap atribut non-prime di semua tabel sepenuhnya bergantung pada kunci utama masing-masing.
Contoh Penerapan Second Normal Form
Mari sekarang lihat dua contoh.
Contoh 1: Tabel pendaftaran kursus
Sebelumnya, kita melihat tabel pendaftaran kursus berikut:
| ID Siswa | ID Kursus | Nama Kursus | Nama Instruktur |
|---|---|---|---|
| 1001 | 201 | SQL Fundamentals | Ken Smith |
| 1002 | 202 | Introduction to Python | Merlin O’Donnell |
| 1001 | 202 | Introduction to Python | Merlin O’Donnell |
Mari ikuti langkah-langkah yang telah kita bahas pada bagian sebelumnya.
1. Identifikasi kandidat kunci.
Dalam kasus ini, kandidat kuncinya adalah kunci komposit dari ID Siswa dan ID Kursus. Kombinasi unik ini mengidentifikasi setiap baris dalam tabel.
2. Tentukan ketergantungan fungsional
Nama Kursus dan Nama Instruktur bergantung pada ID Kursus, bukan pada seluruh kunci komposit (ID Siswa, ID Kursus). Ini adalah ketergantungan parsial karena atribut-atribut ini hanya bergantung pada sebagian dari kunci komposit.
3. Hilangkan ketergantungan parsial
Kita perlu memindahkan atribut yang hanya bergantung pada sebagian kunci (Nama Kursus dan Nama Instruktur) ke tabel baru yang didasarkan hanya pada ID Kursus.
Setelah dekomposisi, tabel baru kita terlihat seperti ini:
Tabel pendaftaran kursus
| ID Siswa | ID Kursus |
|---|---|
| 1001 | 201 |
| 1002 | 202 |
| 1001 | 202 |
Tabel detail kursus
| ID Kursus | Nama Kursus | Nama Instruktur |
|---|---|---|
| 201 | SQL Fundamentals | Ken Smith |
| 202 | Introduction to Python | Merlin O’Donnell |
Jika Anda ingin praktik langsung dan membuat basis data sendiri, lihat kursus PostgresQL kami. Jika Anda sedikit lebih mahir, Anda bisa mencoba Introduction to Data Modeling in Snowflake, yang membahas gagasan seperti pemodelan entitas-relasi dan dimensional.
Contoh 2: Tabel pesanan
Kita akan mulai dengan tabel Pesanan ini. Cobalah ikuti langkah-langkah yang telah kita bahas di atas dan dekomposisi tabel ini sendiri!
| ID Pesanan | ID Produk | Tanggal Pesanan | Nama Produk | Nama Pemasok |
|---|---|---|---|---|
| 1 | 201 | 2024-11-01 | Laptop | TechSupply |
| 1 | 202 | 2024-11-01 | Mouse | TechSupply |
| 2 | 201 | 2024-11-02 | Laptop | TechSupply |
| 3 | 203 | 2024-11-03 | Keyboard | KeyMasters |
1. Identifikasi kandidat kunci
Kombinasi ID Pesanan dan ID Produk mengidentifikasi setiap baris secara unik, menjadikan (ID Pesanan, ID Produk) sebagai kandidat kunci komposit. Tidak ada satu kolom pun yang dapat mengidentifikasi baris secara unik karena:
- ID Pesanan saja tidak unik, karena beberapa produk bisa menjadi bagian dari pesanan yang sama.
- ID Produk saja tidak unik, karena produk yang sama dapat muncul di pesanan yang berbeda.
Ini berarti (ID Pesanan, ID Produk) juga merupakan kunci utama kita.
2. Tentukan ketergantungan fungsional
Tanggal Pesanan bergantung pada ID Pesanan (bukan pada seluruh kunci komposit). Ini adalah ketergantungan parsial.
Nama Produk dan Nama Pemasok bergantung pada ID Produk (bukan pada seluruh kunci komposit). Ini juga ketergantungan parsial.
3. Hilangkan ketergantungan parsial
Kita perlu membagi tabel menjadi tabel-tabel yang lebih kecil, masing-masing menangani satu ketergantungan logis.
Pertama, kita akan membuat tabel untuk informasi pesanan, yang memuat informasi khusus untuk ID Pesanan.
Tabel Pesanan
| ID Pesanan | Tanggal Pesanan |
|---|---|
| 1 | 2024-11-01 |
| 2 | 2024-11-02 |
| 3 | 2024-11-03 |
Lalu, kita membuat tabel yang berisi informasi khusus untuk ID Produk.
Tabel Pesanan
| ID Produk | Nama Produk | Nama Pemasok |
|---|---|---|
| 201 | Laptop | TechSupply |
| 202 | Mouse | TechSupply |
| 203 | Keyboard | KeyMasters |
Tabel asli kini disederhanakan hanya menjadi kunci komposit dan relasi antara pesanan dan produk.
| ID Pesanan | ID Produk |
|---|---|
| 1 | 201 |
| 1 | 202 |
| 2 | 201 |
| 3 | 203 |
Sekarang, basis data kita berada dalam 2NF karena 1) semua ketergantungan parsial telah dihilangkan, dan 2) atribut non-prime sepenuhnya bergantung pada kunci utama masing-masing.
Kapan Menerapkan Second Normal Form
Jadi, mengapa Anda perlu merefaktor basis data ke 2NF? Apakah ini sudah cukup, atau sebaiknya melangkah lebih jauh dan menargetkan 3NF?
Manfaat dan keterbatasan second normal form
Second normal form menawarkan beberapa keunggulan, menjadikannya langkah yang berguna dalam proses normalisasi basis data:
- Peningkatan integritas data: Dengan menghilangkan ketergantungan parsial, 2NF meminimalkan anomali saat penyisipan, pembaruan, dan penghapusan, sehingga basis data lebih andal.
- Pengurangan redundansi: 2NF mengurangi pengulangan data, mengoptimalkan penggunaan penyimpanan, dan menyederhanakan pemeliharaan data.
- Struktur data yang lebih baik: Ini menjadi landasan untuk normalisasi lebih lanjut, seperti menuju third normal form, dengan menciptakan desain basis data yang lebih bersih dan efisien.
Namun ada beberapa keterbatasan:
- Peningkatan kompleksitas: Mendekomposisi tabel agar memenuhi 2NF dapat membuat proses desain lebih kompleks, khususnya saat menangani kunci komposit dan ketergantungan.
- Join tambahan: Pemecahan tabel mungkin memerlukan lebih banyak join dalam kueri, yang berpotensi memengaruhi kinerja pada sistem dengan dataset besar atau kueri kompleks — pembahasan lebih lanjut di bawah.
- Redundansi tersisa: Meskipun 2NF mengurangi ketergantungan parsial, ia tidak menangani ketergantungan transitif, sehingga sebagian redundansi tetap ada hingga ditangani di 3NF.
Pertimbangan kinerja dengan second normal form
Mendekomposisi tabel untuk menghilangkan ketergantungan parsial dapat berdampak langsung pada kinerja basis data. Di satu sisi, mencapai 2NF mengurangi redundansi data dan meningkatkan konsistensi, sehingga lebih sedikit anomali saat operasi insert, update, atau delete. Di sisi lain, normalisasi dapat meningkatkan jumlah tabel, yang berarti diperlukan join tambahan saat mengambil data terkait. Ini dapat memengaruhi kinerja kueri pada dataset besar.
Agar basis data yang dinormalisasi tetap berkinerja baik, pastikan Anda mengikuti praktik terbaik berikut:
- Pengindeksan: Gunakan indeks untuk mempercepat join antar tabel hasil dekomposisi.
- Optimasi kueri: Optimalkan kueri untuk meminimalkan biaya join tambahan.
- Pendekatan hibrida: Padukan normalisasi dengan denormalisasi di area yang penting untuk kinerja, seperti tabel pelaporan.
- Pemantauan rutin: Evaluasi kinerja basis data Anda secara berkelanjutan dengan alat pemrofilan untuk mendeteksi potensi masalah.
Apakah 2NF hanya langkah transisional menuju third normal form?
Dalam banyak kasus, perancang basis data berupaya mencapai third normal form karena kemampuannya untuk lebih mengurangi redundansi dan meningkatkan integritas data secara keseluruhan. Namun, mencapai 3NF sering memerlukan pekerjaan tambahan, seperti membuat lebih banyak tabel dan relasi, yang dapat menambah kompleksitas dan pertukaran kinerja dalam eksekusi kueri.
Ada kasus di mana penggunaan second normal form saja sudah memadai. Jika kesederhanaan dan implementasi cepat menjadi prioritas, seperti dalam proyek skala kecil, pembuatan prototipe, atau situasi dengan redundansi data minimal, 2NF dapat mencukupi. Misalnya, dalam sistem di mana semua atribut sudah sepenuhnya bergantung pada kunci utama sederhana, mencapai 2NF mungkin sudah memenuhi tujuan utama untuk mengurangi ketergantungan parsial, tanpa perlu normalisasi lebih lanjut.
Melangkah melampaui second normal form: menuju third normal form
Jika Anda ingin menormalisasi basis data lebih jauh, Anda dapat terus merefaktor tabel untuk mencapai third normal form.
3NF dibangun di atas 2NF dengan menangani ketergantungan transitif – situasi ketika atribut non-kunci bergantung pada atribut non-kunci lainnya alih-alih pada kunci utama. Perkembangan ini memastikan setiap atribut bergantung langsung pada kunci utama dan tidak pada hal lainnya.
Sebagai contoh, dalam tabel yang melacak pendaftaran kursus:
- 2NF: Memastikan bahwa atribut seperti nama kursus dan nama siswa sepenuhnya bergantung pada kunci utama masing-masing (misalnya, ID Siswa dan ID Kursus). Ini menghilangkan ketergantungan parsial, ketika atribut non-kunci hanya bergantung pada sebagian dari kunci komposit.
- 3NF: Memastikan bahwa atribut seperti detail instruktur atau informasi departemen disimpan dalam tabel terpisah, menghilangkan ketergantungan transitif.
3NF ideal untuk sistem yang lebih kompleks di mana integritas dan efisiensi data sangat penting, terutama saat volume data meningkat. Lihat artikel Apa itu third normal form? jika Anda ingin mempelajari lebih lanjut tentang 3NF dan bentuk yang lebih ketat, BCNF.
Kesimpulan
Second normal form adalah langkah penting dalam normalisasi basis data, menjembatani kesenjangan antara 1NF dan bentuk yang lebih tinggi seperti 3NF. Dengan menghapus ketergantungan parsial, 2NF mengurangi redundansi dan meningkatkan keandalan data Anda. Meskipun dapat menambah kompleksitas, manfaat berupa peningkatan integritas data dan pemeliharaan yang lebih sederhana menjadikannya bagian krusial dari desain basis data yang efektif.
Jika Anda siap meningkatkan keterampilan, jelajahi kursus Database Design kami untuk memperdalam pemahaman tentang teknik normalisasi dan penerapannya secara praktis. Anda juga dapat memvalidasi keterampilan SQL dan manajemen basis data serta menunjukkan keahlian Anda kepada calon pemberi kerja dengan Sertifikasi SQL Associate kami!
Terakhir, saya ingin mengatakan, jika Anda seorang pengambil keputusan di bisnis dan tahu bahwa Anda perlu membangun basis data yang lebih bersih dan efisien, pertimbangkan untuk mengajukan permintaan demo DataCamp for Business. Kami dapat membantu mentransformasi kapabilitas tim Anda sehingga Anda bisa membuat sistem basis data yang skalabel guna mendorong efisiensi dan inovasi bisnis. Kami bahkan dapat membuat jalur pembelajaran dan track khusus yang disesuaikan.

Saya adalah tech lead berorientasi produk yang berspesialisasi dalam mengembangkan startup tahap awal dari prototipe pertama hingga mencapai product-market fit dan seterusnya. Saya sangat penasaran dengan cara orang menggunakan teknologi, dan saya senang bekerja erat dengan para founder serta tim lintas fungsi untuk mewujudkan ide-ide berani. Saat tidak membangun produk, saya mencari inspirasi di berbagai penjuru dunia atau melepas penat di studio yoga.
2NF FAQs
Dapatkah second normal form (2NF) diterapkan pada basis data tanpa kunci komposit?
Ya! Meskipun 2NF sering melibatkan kunci komposit, tabel dengan satu kunci juga dapat mengikuti prinsip 2NF jika semua atribut non-prime sepenuhnya bergantung pada kunci utama.
Apakah mencapai 2NF menjamin penghilangan semua redundansi dalam basis data?
Tidak. Meskipun 2NF menghilangkan ketergantungan parsial, ini tidak menangani ketergantungan transitif. Untuk itu, Anda perlu melangkah ke third normal form (3NF).
Apakah ada situasi di mana basis data dalam 1NF sudah cukup tanpa melanjutkan ke 2NF?
Ya. Dalam sistem yang sangat sederhana dengan redundansi data minimal atau dalam prototipe, 1NF mungkin sudah cukup. Namun, saya umumnya tidak menyarankan berhenti di 1NF kecuali Anda memiliki alasan yang sangat spesifik dan dapat dibenarkan.
Apa perbedaan antara 2NF dan third normal form (3NF)?
2NF menghapus ketergantungan parsial, memastikan atribut bergantung pada seluruh kunci. 3NF melangkah lebih jauh dengan menghapus ketergantungan transitif, memastikan bahwa atribut bergantung langsung pada kunci utama dan bukan pada atribut non-kunci lainnya.
Bagaimana cara memeriksa apakah basis data saya yang ada sudah berada dalam 2NF?
Anda dapat memeriksanya dengan meninjau semua tabel yang memiliki kunci komposit dan memverifikasi bahwa semua atribut non-prime bergantung pada seluruh kunci komposit, bukan hanya sebagian.
