Sabtu, 27 Juni 2020

Pembahasan Lengkap tentang Normalisasi Database

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.
PEMBAHASAN LENGKAP TENTANG NORMASLISASI DATABASE
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!
Apa yang dimaksud dengan record dan atribut
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!
Unnormalized Form Database Belum Dinormalisasi
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.
Normalisasi Database 1F
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
Contoh Tabel Normalisasi Database 1F
Tabel Nomor Kontak Pembeli
Contoh Tabel Normalisasi Database 1F 2
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!
Dependensi Fungsional
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!
Dependensi Fungsional 2
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!
Contoh Tabel Normalisasi Database 2F
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
Contoh Tabel Normalisasi Database 2F 2
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
Contoh Tabel Normalisasi Database 2F 3
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
Contoh Tabel Normalisasi Database 2F 4
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!
Contoh Tabel Normalisasi Database 3F
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
Contoh Tabel Normalisasi Database 3F 2
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
Contoh Tabel Normalisasi Database 3F3
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.