Pengertian Normalisasi Database
Pada kesempatan kali ini, kita akan membahas tentang normalisasi database. Apa
yang dimaksud dengan normalisasi database?
Normalisasi Database adalah suatu metode yang digunakan dalam membuat
rancangan database, agar struktur database yang dirancang memiliki kualitas
yang baik. Adapun kualitas yang baik tersebut diantaranya, yaitu terhindari
dari anomali (penyimpangan) maupun memiliki sedikit redundansi data
(data-data duplikat yang tidak dibutuhkan).
Mohon diperhatikan, jenis database yang dimaksud dalam pembahasan ini adalah
relational database. Apa yang dimaksud dengan relational database?
Relational database (dalam bahasa Indonesia disebut basis data relasional)
adalah salah satu jenis database yang menyimpan data-data dalam bentuk tabel
(disebut relation). Tabel yang dimaksud adalah tabel sebagaimana biasanya,
yang terdiri dari kolom dan baris.
Dalam relational database, terdapat istilah khusus yang digunakan untuk
menamai kolom, yaitu disebut dengan field atau atribut. Adapun, istilah khusus
yang digunakan untuk menamai baris, yaitu disebut dengan record atau
tuple. Basis data relasional diperkenalkan sekitar tahun 1970 oleh Edgar
F. Codd.
Untuk melakukan normalisasi terhadap suatu relational database, dapat
dilakukan melalui beberapa tahapan. Secara garis besar, tahapan tersebut
dimulai dari mengubah UNF (istilah untuk menyebut rancangan database yang
belum dinormalisasi) menjadi 1F, kemudian 2F, 3F, dan seterusnya.
Unnormalized Form (UNF)
Unnormalized Form (UNF) adalah istilah untuk menyebut database yang
belum dinormalisasi. Untuk mengetahui apakah suatu database sudah
dinormalisasi atau belum, dapat di identifikasi berdasarkan ciri khas dari
UNF, yaitu sebagai berikut:
1. adanya data tentang suatu atribut yang tersimpan dalam record berisi lebih
dari satu;
2. adanya atribut yang pada dasarnya sama saja (atribut berulang).
Perhatikan contoh tabel database berikut ini!
Tabel database tersebut terdiri dari tiga atribut, yaitu sebagai berikut:
1. atribut ID Pembeli;
2. atribut nama pembeli;
3. atribut nomor kontak.
Tabel database tersebut terdiri dari tiga record, yaitu sebagai
berikut:
1. record pertama berisi data P-001, Ahmad dan 0818123456789, 0821013456789;
2. record kedua berisi data P-022, Sinta dan 0852564845212;
3. record ketiga berisi data P-003, Andi dan 0878153684589, 0821145687894.
Bila kita perhatikan, data atribut nomor kontak yang tersimpan di record
pertama dan ketiga memiliki data lebih dari satu. Berdasarkan hal tersebut,
maka kita bisa mengatakan bahwa tabel database tersebut belum di
normalisasi. Alasannya, karena ciri khas dari UNF sebagaimana yang telah
disebutkan, yaitu adanya data tentang suatu atribut yang tersimpan dalam
record berisi lebih dari satu.
Selanjutnya, untuk mengetahui apakah suatu database sudah dinormalisasi atau
belum, dapat di identifikasi berdasarkan ciri khas dari UNF lainnya, yaitu
adanya atribut yang pada dasarnya sama saja (atribut berulang).
Perhatikan contoh tabel database berikut ini!
Bila kita perhatikan, meskipun data atribut nomor kontak yang tersimpan di
record pertama dan ketiga sekarang hanya ada satu, namun penambahan
atribut yang pada dasarnya sama (nomor kontak 1 dan nomor kontak 2), tetap
saja dianggap sebagai database yang belum dinormalisasi.
First Normal Form (1F)
First Normal Form (1F) adalah salah satu tahapan dalam melakukan
normalisasi database. Untuk mengetahui apakah suatu database sudah
memenuhi kriteria 1F atau belum, dapat diidentifikasi berdasarkan ciri
khas dari 1F, yaitu sebagai berikut:
1. tidak ada data tentang suatu atribut yang tersimpan dalam record berisi
lebih dari satu;
2. tidak ada atribut yang pada dasarnya sama saja (atribut
berulang).
Untuk melakukan normalisasi tabel UNF yang ditampilkan sebelumnya, dapat
dilakukan dengan cara berikut ini.
Bila kita perhatikan, tabel database tersebut tidak memiliki ciri khas
dari UNF. Meskipun terjadi redundansi data, namun tabel tersebut
memenuhi kriteria 1F. Adapun untuk mengidentifikasi tiap record secara
unik, kita bisa menggunakan composite key sebagai primary key. Adapun
primary key yang dapat dibentuk adalah composite (gabungan) dari atribut
ID Pembeli dan Nomor Kontak.
Selain dari itu, untuk mengubah UNF menjadi 1F dapat pula dibuat menjadi
seperti berikut ini:
Tabel Nama Pembeli
Tabel Nomor Kontak Pembeli
Bila kita lihat, tabel database yang semula hanya ada satu dipisahkan
menjadi dua tabel database. Hal tersebut diperbolehkan, yang penting
dalam mengubah UNF ke 1F, intinya adalah tidak diperbolehkan ada ciri
khas UNF dalam suatu tabel database.
Second Normal Form (2F)
Second Normal Form (2F) adalah salah satu tahapan dalam
melakukan normalisasi database. Untuk mengetahui apakah suatu database
sudah memenuhi kriteria 2F atau belum, dapat diidentifikasi
berdasarkan ciri dari 2F, yaitu semua atribut (kolom tabel) yang bukan
primary key harus memiliki ketergantungan fungsional secara penuh
terhadap primary key. Apa yang dimaksud dengan ketergantungan
fungsional secara penuh? Untuk mengetahui arti kata dimaksud, kita
perlu mengetahui terlebih dahulu tentang pengertian ketergantungan
fungsional.
Ketergantungan fungsional (functional dependency) adalah suatu konsep
dalam database, yang mana data pada suatu atribut terikat nilainya
dengan data pada atribut lainnya.
Perhatikan tabel berikut ini!
Misalnya, jika kita mencari data ID Pembeli dengan nilai P-001, maka
hasilnya akan selalu memunculkan nama Ahmad, begitu pula jika kita
mencari data ID Pembeli dengan nilai P-002, maka hasilnya akan
selalu memunculkan nama Sinta.
Berdasarkan kejadian tersebut, maka dapat kita katakan atribut nama
pembeli memiliki ketergantungan fungsional terhadap atribut ID
Pembeli.
Secara garis besar, terdapat dua jenis functional dependency, yaitu
full functional dependency (ketergantungan fungsional secara penuh)
dan partial functional dependency (ketergantungan fungsional
sebagian).
Ketergantungan secara penuh (full functional dependency) maksudnya
data pada suatu atribut yang bukan primary key, sepenuhnya
bergantung pada atribut yang dijadikan primary key.
Perhatikan tabel database berikut ini!
Bila kita perhatikan, tabel database tersebut telah memenuhi
kriteria 2F, alasannya karena setiap data pada atribut nama barang
memiliki ketergantungan fungsional penuh terhadap data pada
atribut ID Barang. Hal tersebut, dapat dibuktikan dengan cara
berikut ini:
1. ID Barang B-001 menentukan data nama barang, yaitu kertas.
2. ID Barang B-002 menentukan data nama barang, yaitu gunting.
3. ID Barang B-003 menentukan data nama barang, yaitu penggaris.
4. Data barang dengan nama kertas tidak akan muncul, jika kita
mencari ID Barang yang nilai datanya adalah B-002, sehingga setiap
data ID Barang menentukan secara penuh (full functional
dependency), terhadap data nama barang pada tabel database
dimaksud.
Untuk memperjelas pembahasan tentang functional dependency,
sekarang kita akan menampilkan tabel database yang memenuhi
kriteria 1F, namun belum memenuhi kriteria 2F.
Perhatikan contoh berikut ini!
Bila kita perhatikan, untuk mengidentifikasi tiap record secara
unik, kita membutuhkan primary key yang terbuat dari composite
key. Terdapat beberapa composite key yang dapat terbentuk, salah
satu composite key yang dapat dijadikan primary key adalah
gabungan dari ID Pesanan dan ID Barang.
Sekarang kita analisis, apakah setiap atribut yang bukan primary
key memiliki ketergantungan penuh terhadap primary key tersebut
atau tidak? Bila kita perhatikan, data atribut pada nama barang
tidak memiliki ketergantungan pada ID Pesanan, alasannya sebagai
berikut:
1. ID Pesanan O-001 dapat memiliki nama barang kertas.
2. ID Pesanan O-001 juga dapat memiliki nama barang gunting.
Berdasarkan hal tersebut, maka bisa katakan bahwa terdapat
atribut yang memiliki ketergantungan sebagian (partial
functional dependency) terhadap primary key, yaitu atribut nama
barang tidak bergantung pada ID Pesanan (salah satu atribut
penyusun primary key). Selanjutnya, atribut tanggal pesanan juga
tidak memiliki ketergantungan terhadap ID Barang.
Oleh sebab itu, tabel sebagaimana dimaksud telah memenuhi
kriteria 1F, namun belum memenuhi kriteria 2F. Untuk membuat
tabel tersebut memenuhi kriteria 2F, dapat dilakukan dengan cara
berikut ini:
Tabel Pemesanan
Untuk mengidentifikasi setiap record secara unik, kita bisa
menggunakan atribut ID Pesanan sebagai primary key. Tabel
pemesanan tersebut telah memenuhi kriteria 2F (tidak terdapat
partial functional dependence), alasannya:
1. data pada atribut tanggal pemesanan memiliki ketergantungan
fungsional penuh terhadap data pada atribut ID Pesanan,
tanggal pemesanan tanpa ID Pesanan, statusnya berubah menjadi
tanggal biasa, sehingga data pada atribut tanggal pemesanan
memiliki ketergantungan fungsional penuh terhadap data pada ID
Pesanan.
2. atribut ID Pembeli adalah foreign key untuk menghubungkan
tabel data pembeli. Foreign key adalah primary key yang
terdapat pada tabel database lain.
Tabel Daftar Pemesanan Barang
Untuk mengidentifikasi setiap record secara unik, kita bisa
menggunakan composite key dari dua foreign key yang
merupakan gabungan dari foreign key ID Pesanan dan foreign
key ID Barang. Tabel jumlah pemesanan barang tersebut telah
memenuhi kriteria 2F.
Tabel Daftar Barang
Untuk mengidentifikasi setiap record secara unik, kita
bisa menggunakan atribut ID Barang sebagai primary key.
Tabel daftar barang tersebut telah memenuhi kriteria 2F.
Bila kita perhatikan, sekarang tabel yang semula ada satu
berubah menjadi tiga. Untuk melakukan normalisasi dari 1F
ke 2F dapat dilakukan dengan cara membagi tabel menjadi
beberapa tabel, yang tujuan akhirnya menghilangkan partial
functional dependency.
Biasanya, partial functional dependency terjadi pada suatu
tabel database, yang mana primary key yang digunakan
berupa composite key.
Third Normal Form (3F)
Third Normal Form (3F) adalah salah satu tahapan
dalam melakukan normalisasi database. Untuk mengetahui
apakah suatu database sudah memenuhi kriteria 3F atau
belum, dapat diidentifikasi berdasarkan ciri khas dari 3F,
yaitu sebagai berikut:
1. telah memenuhi semua kriteria 2F;
2. tidak boleh ada ketergantungan suatu atribut terhadap
atribut lain yang bukan merupakan primary key (transitive
dependency).
Perhatikan contoh berikut ini!
Untuk mengidentifikasi tiap record secara unik, kita
bisa menggunakan ID Pembeli sebagai primary key. Tabel
database tersebut telah memenuhi kriteria 2F, namun
belum memenuhi kriteria 3F. Alasannya, karena pada tabel
tersebut, atribut provider kontak, selain bergantung
pada ID Pembeli, juga bergantung pada atribut nomor
kontak (atribut yang tidak termasuk primary key).
Oleh sebab itu, agar tabel tersebut memenuhi kriteria
3F, maka kita dapat mengubahnya seperti berikut ini:
Tabel Data Pembeli
Untuk mengidentifikasi tiap record secara unik, kita
bisa menggunakan atribut ID Pembeli sebagai primary
key. Tabel database tersebut telah memenuhi kriteria
3F, karena tidak ada atribut yang bergantung pada
atribut yang bukan primary key.
Tabel Nama Provider
Untuk mengidentifikasi tiap record secara unik, kita
bisa menggunakan atribut Nomor Kontak sebagai
primary key. Tabel database tersebut telah memenuhi
kriteria 3F, karena tidak ada atribut yang
bergantung pada atribut yang bukan primary key.
Demikian pembahasan materi tentang normalisasi
database yang dapat kami sampaikan. Apabila terdapat
pertanyaan, saran, dan kritik akibat kekeliruan kami
dapat disampaikan di kolom komentar, terima kasih.
Baca juga artikel kami lainnya: