Normalisasi Database
Normalisasi Database
Normalisasi database adalah sebuah teknik sistematis yang diterapkan untuk mengatur atribut data dalam tabel database sedemikian rupa sehingga mengurangi redundansi data dan meningkatkan integritas data. Proses ini melibatkan dekomposisi tabel yang lebih besar menjadi tabel-tabel yang lebih kecil dan terstruktur dengan baik, serta mendefinisikan hubungan antar tabel tersebut. Tujuan utamanya adalah untuk menghilangkan anomali yang dapat terjadi selama operasi "insert", "update", dan "delete" data.
1. Konsep Dasar Normalisasi
Inti dari normalisasi adalah untuk memastikan bahwa setiap atribut dalam sebuah tabel secara langsung bergantung pada kunci utama tabel tersebut. Ketergantungan fungsional ini menjadi landasan dalam mengidentifikasi dan menghilangkan redundansi. Proses normalisasi bergerak melalui serangkaian bentuk normal (Normal Form - NF), yang masing-masing memiliki aturan spesifik yang harus dipenuhi oleh struktur tabel. Urutan normalisasi yang umum diikuti adalah dari Bentuk Normal Pertama (1NF) hingga Bentuk Normal Boyce-Codd (BCNF), meskipun bentuk normal yang lebih tinggi (4NF, 5NF, dan 6NF) juga ada untuk menangani kasus-kasus yang lebih kompleks.
a. Menghindari Redundansi Data: Redundansi data terjadi ketika informasi yang sama disimpan berulang kali di beberapa tempat dalam database. Hal ini dapat menyebabkan pemborosan ruang penyimpanan, inkonsistensi data (jika satu salinan diperbarui tetapi yang lain tidak), dan kesulitan dalam pemeliharaan data. Normalisasi bertujuan untuk menghilangkan atau meminimalkan redundansi dengan memastikan bahwa setiap fakta disimpan hanya sekali.
b. Menghindari Anomali Update/Delete/Insert: Anomali adalah inkonsistensi yang tidak diinginkan yang dapat terjadi saat melakukan operasi modifikasi data pada tabel yang tidak ternormalisasi.
c. Anomali Penyisipan (Insert Anomaly): Ketidakmampuan untuk menyisipkan data ke dalam tabel tanpa adanya data lain yang terkait. Contohnya, kita tidak dapat menambahkan informasi tentang mata kuliah baru jika belum ada mahasiswa yang mengambil mata kuliah tersebut dalam tabel yang sama.
d. Anomali Pembaruan (Update Anomaly): Jika data yang sama disimpan berulang kali, memperbarui satu instans mungkin tidak memperbarui semua instans lainnya, menyebabkan inkonsistensi. Contohnya, jika alamat seorang pelanggan disimpan di beberapa baris, memperbarui alamat di satu baris tanpa memperbarui yang lain akan menghasilkan data yang tidak konsisten.
e. Anomali Penghapusan (Delete Anomaly): Penghapusan data tertentu dapat menyebabkan hilangnya informasi lain yang terkait secara tidak sengaja. Contohnya, jika informasi tentang mata kuliah dan mahasiswa yang mengambilnya disimpan dalam satu tabel, menghapus data mahasiswa terakhir yang mengambil mata kuliah tertentu juga akan menghilangkan informasi tentang mata kuliah tersebut.
Urutan Normalisasi (1NF → 2NF → 3NF → BCNF): Proses normalisasi dilakukan secara bertahap melalui bentuk-bentuk normal. Setiap bentuk normal yang lebih tinggi mencakup persyaratan dari bentuk normal sebelumnya dan menambahkan aturan tambahan.
2. Langkah Teknis Normalisasi
a. First Normal Form (1NF)
Sebuah tabel dikatakan berada dalam bentuk normal pertama (1NF) jika dan hanya jika setiap atribut dalam setiap baris tabel tersebut berisi nilai atomik (tunggal). Artinya, tidak ada grup berulang atau atribut bernilai ganda dalam satu sel.
Contoh Sebelum 1NF:
| ID\_Pesanan | Nama\_Pelanggan | Produk | Kuantitas | Harga\_Satuan |
| :---------- | :--------------- | :----------------- | :-------- | :------------ |
| 101 | Budi Santoso | Buku, Pensil | 2, 5 | 10000, 2000 |
| 102 | Siti Aminah | Penggaris | 3 | 5000 |
Dalam contoh di atas, kolom "Produk", "Kuantitas", dan "Harga\_Satuan" memiliki beberapa nilai dalam satu sel untuk pesanan dengan ID\_Pesanan 101. Ini melanggar aturan 1NF.
Contoh Sesudah 1NF:
Untuk mencapai 1NF, kita perlu memecah baris yang memiliki nilai ganda menjadi beberapa baris, sehingga setiap sel hanya berisi satu nilai.
| ID\_Pesanan | Nama\_Pelanggan | Produk | Kuantitas | Harga\_Satuan |
| :---------- | :--------------- | :------- | :-------- | :------------ |
| 101 | Budi Santoso | Buku | 2 | 10000 |
| 101 | Budi Santoso | Pensil | 5 | 2000 |
| 102 | Siti Aminah | Penggaris | 3 | 5000 |
Sekarang, setiap atribut dalam setiap baris memiliki nilai atomik.
b. Second Normal Form (2NF)
Sebuah tabel berada dalam bentuk normal kedua (2NF) jika memenuhi dua kondisi:
1. Tabel tersebut harus sudah dalam bentuk normal pertama (1NF).
2. Semua atribut non-kunci harus sepenuhnya bergantung fungsional pada seluruh kunci utama. Ini berarti tidak ada atribut non-kunci yang hanya bergantung pada sebagian dari kunci utama (jika kunci utamanya bersifat komposit atau terdiri dari lebih dari satu atribut).
Contoh Sebelum 2NF:
Misalkan kita memiliki tabel setelah 1NF sebagai berikut (dengan kunci utama komposit: ID\_Pesanan dan Produk):
| ID\_Pesanan | Produk | Nama\_Pelanggan | Alamat\_Pelanggan | Kuantitas | Harga\_Satuan |
| :---------- | :------- | :--------------- | :---------------- | :-------- | :------------ |
| 101 | Buku | Budi Santoso | Jl. Mawar No. 5 | 2 | 10000 |
| 101 | Pensil | Budi Santoso | Jl. Mawar No. 5 | 5 | 2000 |
| 102 | Penggaris | Siti Aminah | Gg. Dahlia No. 12 | 3 | 5000 |
Dalam tabel ini, "Nama\_Pelanggan" dan "Alamat\_Pelanggan" hanya bergantung pada "ID\_Pesanan" (sebagian dari kunci utama), bukan pada kombinasi "ID\_Pesanan" dan "Produk". Ini melanggar aturan 2NF.
Contoh Sesudah 2NF:
Untuk mencapai 2NF, kita perlu memecah tabel menjadi dua tabel: satu untuk informasi pesanan dan satu lagi untuk detail pesanan.
Tabel Pesanan:
| ID\_Pesanan | Nama\_Pelanggan | Alamat\_Pelanggan |
| :---------- | :--------------- | :---------------- |
| 101 | Budi Santoso | Jl. Mawar No. 5 |
| 102 | Siti Aminah | Gg. Dahlia No. 12 |
Tabel Detail\_Pesanan:
| ID\_Pesanan | Produk | Kuantitas | Harga\_Satuan |
| :---------- | :------- | :-------- | :------------ |
| 101 | Buku | 2 | 10000 |
| 101 | Pensil | 5 | 2000 |
| 102 | Penggaris | 3 | 5000 |
Sekarang, setiap atribut non-kunci dalam setiap tabel sepenuhnya bergantung pada seluruh kunci utama tabelnya.
c. Third Normal Form (3NF)
Sebuah tabel berada dalam bentuk normal ketiga (3NF) jika memenuhi dua kondisi:
1. Tabel tersebut harus sudah dalam bentuk normal kedua (2NF).
2. Tidak ada atribut non-kunci yang bergantung transitif pada kunci utama. Artinya, semua atribut non-kunci harus bergantung langsung pada kunci utama, dan tidak bergantung pada atribut non-kunci lainnya.
Contoh Sebelum 3NF:
Misalkan kita memiliki tabel "Pesanan" setelah 2NF:
| ID\_Pesanan | Nama\_Pelanggan | Kode\_Pos | Kota |
| :---------- | :--------------- | :-------- | :-------- |
| 101 | Budi Santoso | 12345 | Jakarta |
| 102 | Siti Aminah | 67890 | Surabaya |
Dalam tabel ini, "Kota" bergantung pada "Kode\_Pos", yang bukan merupakan kunci utama. Ini adalah ketergantungan transitif (ID\_Pesanan → Kode\_Pos → Kota), yang melanggar aturan 3NF.
Contoh Sesudah 3NF:
Untuk mencapai 3NF, kita perlu memecah tabel menjadi dua tabel: satu untuk informasi pesanan dan satu lagi untuk informasi kode pos.
Tabel Pesanan:
| ID\_Pesanan | Nama\_Pelanggan | Kode\_Pos |
| :---------- | :--------------- | :-------- |
| 101 | Budi Santoso | 12345 |
| 102 | Siti Aminah | 67890 |
Tabel Kode\_Pos:
| Kode\_Pos | Kota |
| :-------- | :------- |
| 12345 | Jakarta |
| 67890 | Surabaya |
Sekarang, tidak ada atribut non-kunci dalam tabel "Pesanan" yang bergantung pada atribut non-kunci lainnya. Demikian pula pada tabel "Kode\_Pos", kunci utamanya adalah "Kode\_Pos" dan "Kota" bergantung langsung padanya.
d. Boyce-Codd Normal Form (BCNF)
Boyce-Codd Normal Form (BCNF) adalah bentuk normal yang lebih ketat daripada 3NF. Sebuah tabel berada dalam BCNF jika dan hanya jika untuk setiap ketergantungan fungsional $X \rightarrow Y$, $X$ adalah superkey dari tabel tersebut. Dengan kata lain, setiap atribut yang menentukan atribut lain haruslah bagian dari kunci utama. BCNF diperlukan untuk menangani kasus-kasus di mana terdapat beberapa kunci kandidat dalam sebuah tabel dan terdapat ketergantungan antar atribut kunci kandidat.
Contoh Sebelum BCNF:
Misalkan kita memiliki tabel "Mata\_Kuliah\_Dosen" dengan atribut: Nama\_Mahasiswa, Nama\_Dosen, Nama\_Mata\_Kuliah. Aturan bisnisnya adalah:
1. Seorang mahasiswa dapat mengambil beberapa mata kuliah.
2. Setiap mata kuliah diajar oleh satu dosen.
3. Setiap mata kuliah memiliki nama yang unik.
Kunci kandidat untuk tabel ini adalah {Nama\_Mahasiswa, Nama\_Mata\_Kuliah} dan {Nama\_Mahasiswa, Nama\_Dosen} (karena setiap mata kuliah diajar oleh satu dosen).
| Nama\_Mahasiswa | Nama\_Dosen | Nama\_Mata\_Kuliah |
| :-------------- | :---------- | :----------------- |
| Andi | Prof. Budi | Basis Data |
| Andi | Dr. Susi | Pemrograman Web |
| Budi | Prof. Budi | Basis Data |
Di sini, terdapat ketergantungan fungsional Nama\_Mata\_Kuliah → Nama\_Dosen (setiap mata kuliah diajar oleh satu dosen). Namun, Nama\_Mata\_Kuliah bukanlah superkey. Ini melanggar BCNF.
Contoh Sesudah BCNF:
Untuk mencapai BCNF, kita perlu memecah tabel menjadi dua tabel:
Tabel Mahasiswa\_Mata\_Kuliah:
| Nama\_Mahasiswa | Nama\_Mata\_Kuliah |
| :-------------- | :----------------- |
| Andi | Basis Data |
| Andi | Pemrograman Web |
| Budi | Basis Data |
Tabel Mata\_Kuliah\_Dosen:
| Nama\_Mata\_Kuliah | Nama\_Dosen |
| :----------------- | :---------- |
| Basis Data | Prof. Budi |
| Pemrograman Web | Dr. Susi |
Dalam struktur ini, ketergantungan fungsional Nama\_Mata\_Kuliah → Nama\_Dosen dipisahkan ke dalam tabelnya sendiri di mana Nama\_Mata\_Kuliah menjadi kunci utama.
3. Alat yang Bisa Digunakan
Beberapa alat bantu yang dapat digunakan dalam proses perancangan dan normalisasi database meliputi:
a. MySQL Workbench: Sebuah alat GUI yang komprehensif untuk perancangan model data, pengembangan SQL, administrasi server, dan banyak lagi untuk sistem manajemen basis data MySQL. Fitur permodelan datanya memungkinkan visualisasi struktur database dan membantu dalam proses normalisasi.
b. DB Browser for SQLite: Sebuah alat GUI ringan dan open-source untuk membuat, mendesain, dan mengelola file database SQLite. Meskipun lebih sederhana dari MySQL Workbench, alat ini tetap berguna untuk memvisualisasikan tabel dan hubungan, yang dapat membantu dalam memahami dan menerapkan prinsip-prinsip normalisasi.
Normalisasi adalah proses penting dalam desain database relasional. Dengan mengikuti tahapan normalisasi, kita dapat menciptakan database yang efisien, fleksibel, dan terhindar dari berbagai masalah integritas data. Tingkat normalisasi yang dipilih untuk sebuah database tertentu akan bergantung pada kebutuhan spesifik aplikasi dan trade-off antara redundansi dan kompleksitas query.
Komentar
Posting Komentar