Normalisasi Database Beserta Pengertian dan Contohnya
Normalisasi database merupakan suatu pendekatan sistematis untuk meminimalkan redundansi data pada suatu database agar database tersebut dapat bekerja dengan optimal. Jika anda seorang database administrator ketika terjadi sesuatu pada database seperti penurunan kinerja, mungkin anda akan ditanya apakah database tersebut telah di normalisasi?
Tujuan Normalisasi Database
Tujuan normalisasi database adalah untuk menghilangkan dan mengurangi redudansi data dan tujuan yang kedua adalah memastikan dependensi data (Data berada pada tabel yang tepat).
Jika data dalam database tersebut belum di normalisasi maka akan terjadi 3 kemungkinan yang akan merugikan sistem secara keseluruhan.
- INSERT Anomali : Situasi dimana tidak memungkinkan memasukkan beberapa jenis data secara langsung di database.
- DELETE Anomali: Penghapusan data yang tidak sesuai dengan yang diharapkan, artinya data yang harusnya tidak terhapus mungkin ikut terhapus.
- UPDATE Anomali: Situasi dimana nilai yang diubah menyebabkan inkonsistensi database, dalam artian data yang diubah tidak sesuai dengan yang diperintahkan atau yang diinginkan.
Normalisasi Database
Normalisasi database terdiri dari banyak bentuk, dalam ilmu basis data ada setidaknya 9 bentuk normalisasi yang ada yaitu 1NF, 2NF, 3NF, EKNF, BCNF, 4NF, 5NF, DKNF, dan 6NF. Namun dalam prakteknya dalam dunia industri bentuk normalisasi ini yang paling sering digunakan ada sekitar 5 bentuk.
Normal Form
Data yang direkam dan dimasukkan secara mentah dalam suatu tabel pada bentuk ini sangat mungkin terjadi inkonsistensi dan anomali data
Contoh Normal Form
1. Normal Form (1NF)
Bentuk normal yang pertama atau 1NF mensyaratkan beberapa kondisi dalam sebuah database, berikut adalah fungsi dari bentuk normal pertama ini.
- Menghilangkan duplikasi kolom dari tabel yang sama.
- Buat tabel terpisah untuk masing-masing kelompok data terkait dan mengidentifikasi setiap baris dengan kolom yang unik (primary key).
Contoh Normalisasi Database 1NF
dari manual bon pembelian diatas kita dapat menjadi bentuk normal pertama dengan memisah-misahkan data pada atribut-atribut yang tepat dan bernilai atomik, juga seluruh record / baris harus lengkap adanya.
2. Normal form (2NF)
Syarat untuk menerapkan normalisasi bentuk kedua ini adalah data telah dibentuk dalam 1NF, berikut adalah beberapa fungsi normalisasi 2NF.
- Menghapus beberapa subset data yang ada pada tabel dan menempatkan mereka pada tabel terpisah.
- Menciptakan hubungan antara tabel baru dan tabel lama dengan menciptakan foreign key.
- Tidak ada atribut dalam tabel yang secara fungsional bergantung pada candidate key tabel tersebut.
Contoh normalisasi database bentuk 2NF
Bentuk normal kedua dengan melakukan dekomposisi tabel diatas menjadi beberapa tabel dan mencari kunci primer dari tiap-tiap tabel tersebut dan atribut kunci haruslah unik.
3. Normal Form (3NF)
Normalisasi database dalam bentuk 3NF bertujuan untuk menghilangkan seluruh atribut atau field yang tidak berhubungan dengan primary key. Dengan demikian tidak ada ketergantungan transitif pada setiap kandidat key. Syarat dari bentuk normal ketiga atau 3NF adalah :
- Memenuhi semua persyaratan dari bentuk normal kedua.
- Menghapus kolom yang tidak tergantung pada primary key.
Contoh Normalisasi Database Bentuk 3NF
Bentuk normal ketiga mempunyai syarat, setiap relasi tidak mempunyai atribut yang bergantung transitif, harus bergantung penuh pada kunci utama dan harus memenuhi bentuk normal kedua (2 NF).
BCNF Boyce–Codd normal form
Merupakan sebuah teknik normalisasi database yang sering disebut 3.5NF, memiliki hubungan yang sangat erat dengan bentuk 3NF. Pada dasarnya adalah untuk menghandle anomali dan overlooping yang tidak dapat di handle dalam bentuk 3NF. Normalisasi database bentuk ini tergantung dari kasus yang disediakan, tidak semua tabel wajib di normalisasi dalam bentuk BCNF.
Membuat database Pembelian
create database pembelianuse pembelian
Membuat table
create table kendaraan (no_polisi char(10),merek char(30),warna char(20), tahun char(5),sp_help kendaraanprimary key (no_polisi) ) create table mekanik (primary key (mekanik_id)mekanik_id char(5), nama_mekanik varchar(50), ) sp_help mekanikharga int,create table parts ( kode_parts char(20), nama_parts varchar(50),no_faktur char(10),primary key (kode_parts) ) sp_help parts create table bon_pembelian ( tanggal datetime,constraint FK_nopolisi foreign key (no_polisi) references kendaraan(no_polisi),no_polisi char(10), mekanik_id char(5), potongan int, primary key (no_faktur),create table transaksi_parts (constraint FK_mekanik foreign key (mekanik_id) references mekanik(mekanik_id) ) sp_help bon_pembelian no_faktur char(10), kode_parts char(20), qty int,constraint FK_kodeparts foreign key (kode_parts) references parts(kode_parts)harga int, discount int, primary key (no_faktur,kode_parts), constraint FK_nofaktur foreign key (no_faktur) references bon_pembelian(no_faktur), )sp_help transaksi_parts
Mengisi data pada table
/*jawaban no.3 *//** Isi data table kendaraan **/INSERT INTO kendaraan VALUES('B3117LB','Biru','Supra X','2005')INSERT INTO kendaraan VALUES('B2121AA','Merah','Supra X','2005')/** isi data table mekanik **//** isi data table parts **/INSERT INTO mekanik VALUES('DDE','Djoko Dewanto')INSERT INTO parts VALUES('SERV001','Engine Tune Up',25000)INSERT INTO parts VALUES('20W501000CC','Oli Top 1 000cc',27000) /** isi data table bon_pembelian **/INSERT INTO bon_pembelian VALUES('05103215',GETDATE(),'B2121AA','DDE',0)INSERT INTO bon_pembelian VALUES('05103214',GETDATE(),'B3117LB','DDE',2000) /** isi data table transkasi_parts **/INSERT INTO transaksi_parts (no_faktur,kode_parts,qty,harga,discount)INSERT INTO transaksi_parts (no_faktur,kode_parts,qty,harga,discount) select '05103214','20W501000CC',2,harga,1000 FROM parts where kode_parts='20W501000CC'select '05103215','SERV001',1,harga,2000 FROM parts where kode_parts='SERV001'select '05103214','SERV001',1,harga,2000 FROM parts where kode_parts='SERV001'INSERT INTO transaksi_parts (no_faktur,kode_parts,qty,harga,discount)
Menampilkan data dari table yang telah kita isi
/*jawaban no.3 */select * from kendaraanselect * from mekanikselect * from bon_pembelianselect * from parts/** Relasi antar table hingga terbentuk 1NF **/select * from transaksi_partsselect a.no_faktur, a.tanggal,a.no_polisi,e.warna,e.merek,e.tahun,a.mekanik_id,d.nama_mekanik,b.kode_parts,c.nama_parts,b.qty,b.harga,b.discount,(b.qty*b.harga)-(b.qty*b.discount) as jumlah,a.potongan,from bon_pembelian as a(select sum((qty*harga)-(qty*discount))-a.potongan from transaksi_parts where no_faktur=a.no_faktur) as total join transaksi_parts as b ON a.no_faktur=b.no_faktur join parts as c ON b.kode_parts=c.kode_partsjoin kendaraan as e ON a.no_polisi=e.no_polisijoin mekanik as d ON a.mekanik_id=d.mekanik_id