Sejak belajar Sistem Basis Data, saya masih nggak mudeng sama yang namanya normalisasi. Pernah pun sempat mengerti dengan belajar sendiri lewat buku perpustakaan, namun dengan penyakit langganan saya yang namanya "LUPA", seringkali kewalahan kalau berurusan dengan yang namanya normalisasi ini. Kabar baiknya saat beberapa hari lalu saya pergi ke perpustakaan lagi dan berniat untuk meminjam buku tentang database. Alhamdulillah, walaupun otak pas-pasan model kayak saya, tapi bisa ngerti beberapa materi yang diajarakan di buku ini. Saat tiba di bagian yang membahas normalisasi, terbesit pikiran, "daripada lupa lagi, lebih baik saya posting di blog". Well, nggak banyak cuap-cuap lagi, saya persembahkan, "normalisasi" versi saya.
Normalisasi diperlukan untuk verifikasi apakah suatu tabel akan memiliki ketidak-konsistenan data atau masalah tertentu ketika misalnya data diperbaharui atau dihapus. aturan-aturan normalisasi dinyatakan dalam bentuk normal dan bentuk normal yang biasa dipakai adalah bentuk pertama (1NF), bentuk kedua(2NF), bentuk ketiga(3NF). ntuk bentuk 4NF dan 5NF digunakan untuk kasus khusus.
Bentuk Normal Pertama
Contoh kasus tabel berbentuk (kode_buku, judul, halaman, topik).
Sebuah buku tentunya bisa saja memiliki lebih dari satu topik. Untuk kasus ini kadang kali diselesaikan dengan mengubah bentuk tabel menjadi :
(kode_buku, judul, halaman, topik1, topik2, topik3)
Desain ini merupakan desain yang parah. Di sini diasumsikan bahwa buku memiliki maksimal 3 topik. Bagaimana jika nanti muncul buku yang ternyata topiknya lebih dari 3? Atau lebih parah lagi jika ada buku yang hanya memiliki 1 topik. Hal ini akan mengakibatkan kolom topik2 dan topik3 terbuang sia-sia.
Kasus ini dapat diselesaikan dengan bentuk normal pertama. Definisi bentuk normal pertama sebagai berikut.
Suatu tabel dikatakan dalam bentuk normal pertama hanya jika setiap kolom bernilai tunggal untuk setiap baris.
Berdasarkan definisi tersebut, maka bentuk
(kode_buku, judul, halaman, topik1, topik2, topik3)
harus dirubah menjadi
(kode_buku, judul, halaman, topik)
Informasi tentang topik cukup diwakili oleh satu kolom saja. Dengan begini, masalah tentang kelebihan ataupun kekurangan topik dapat diselesaikan.
Bentuk Normal kedua
Definisinya sebagai berikut.
Suatu tabel berada dalam bentuk normal kedua jika :
- tabel dalam bentuk normal pertama
- semua kolom buka kunci primer(primary key) tergantung sepenuhnya terhadap kunci primer.
Kunci primer pada bentuk ini adalah kode_buku. Arti "bergantung sepenuhnya terhadap kunci primer" adalah suatu kolom selalu bernilai sama untuk kunci primer yang sama. Oleh karena itu, yang disebut bergantung sepenuhnya terhadap kode_buku adalah judul dan halaman.
Dengan analisis seperti ini, semua kolom yang bergantung penuh pada kunci primer disatukan dalam suatu tabel. Untuk kolom yang tidak memenuhi syarat diletakkan pada tabel lain dengan menambahkan kunci primer pada tabel tersebut. Maka, tabel sebelumnya dengan susunan :
(kode_buku, judul, halaman, topik)
dipecah menjadi :
(kode_buku, judul, halaman) dan (kode_buku, topik)
Lebih khusus lagi, tabel (kode_buku, topik) dipecah lagi menjadi :
(kode_buku, topik) dan (id_topik, nama_topik)
Untuk menghindari ketidak-konsistenan ketika suatu data topik diubah.
Bentuk Normal Ketiga
Definisinya adalah sebagai berikut.
Suatu tabel dikatakan dalam bentuk normal ketiga jika :
- berada dalam bentuk normal kedua
- setiap kolom bukan kunci primer tidak memiliki ketergantungan secara transitif terhadap kunci primer.
Dengan contoh suatu tabel (A, B, C) perlu diketahui :
- jika B bergantung terhadap A, maka B disebut memiliki ketergantungan secara fungsional terhadap A.
- jika C bergantung terhadap B, maka C disebut memiliki ketergantungan secara fungsional terhadap B dan ketergantungan secara transitif terhadap A.
Contoh kasus untuk kali ini pada tabel buku dengan kolom-kolom sebagai berikut.
Buku=(kode_buku, judul, halaman, penerbit, lokasi_penerbit)
Jelas sudah bahwa lokasi_penerbit memiliki ketergantungan transitif terhadap kode_buku, karena lokasi_penerbit memiliki ketergantungan fungsional terhadap penerbit yang memiliki ketergantungan fungsional terhadap kode_buku. Untuk mempermudah pembentukan normal ketiga, bisa digunakan pendekatan sebagai berikut :
Tabel =(a, b, c, d, e) dengan a sebagai kunci primer
e tergantung fungsional terhadap d dan d tergantung fungsional terhadap a. Berarti e bergantung transitif terhadap a. Maka tabel ini perlu dipecah menjadi :
Tabel1=(a, b, c, d)
Tabel2=(d, e)
Dengan pendekatan diatas, maka contoh tabel buku perlu dipecah menjadi :
Buku1=(kode_buku, judul, halaman, penerbit)
Buku2=(penerbit, lokasi_penerbit)
Lebih khusus lagi, untuk menghindari ketidak-konsistenan, penerbit harus dikodekan menjadi id_penerbit agar jika terjadi perubahan pada nama penerbit, maka perubahan cukup dilakukan sekali saja. Maka, tabel hasil akhir menjadi :
Buku1=(kode_buku, judul, halaman, id_penerbit)
Buku2=(id_penerbit, penerbit, lokasi_penerbit)
Huff! Akhirnya selesai juga. Sayangnya di buku ini hanya menjelaskan sampai bentuk normal ketiga saja dan saya belum paham untuk bentuk 4NF dan bentuk 5NF. Jadinya penjelasan cuma bisa sampai bentuk 3NF. Untuk kelanjutannya, saya harus belajar lagi terlebih dahulu atau mungkin para guest sekalian bisa ikut menyumbang juga. Hehehehe…