Kasus Membuat Normalikasi
Kasus:
Sebuah perputakaan memiliki banyak buku yang dapat di pinjamkan ke pada anggota perpustakaan dengan menggunakan kartu peminjaman. Setiap anggota kartu peminjaman memiliki 1 kartu dan dapat meminjam beberapa buku. Data nya terdiri dari id kartu peminjaman, nama peminjam, jumlah hari pinjam, biaya peminjaman, id buku, nama buku, penerbit buku, tahun terbit buku.
| Id_pinjam | Nm_peminjam | Jm_hr_pj | Biaya_pinjam | Id_buku | Nm_buku | Penerbit | Thn_terbit |
| pj001 | Boediyono | 3 | Rp.6000 | Bk001 | Matematika | Erlangga | 2010 |
| pj002 | Mulyadi | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
| pj003 | Burhan | 5 | Rp.9000 | Bk001 | Matematika | Erlangga | 2010 |
| pj001 | Boediyono | 1 | Rp.2000 | Bk003 | Visual basic | Gramedia | 2012 |
| pj004 | Alex | 3 | Rp.6000 | Bk004 | Jaringan | Penebar swadaya | 2008 |
| pj003 | Burhan | 1 | Rp.2000 | Bk005 | Struktur data | Smart book | 2011 |
| pj005 | Suparman | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
Ada beberapa anomali yang terjadi pada table berikut, yaitu:
ü Anomali Peremajaan
Contoh:
Jika terjadi perubahan nama peminjam dengan id pinjam menjadi “Burhanudin”, maka perubahan harus dilakukan sebanyak 2x. Kalau dilakukan hanya 1x, maka data menjadi tidak konsisten (tidak sesuai)
| Id_pinjam | Nm_peminjam | Jm_hr_pj | Biaya_pinjam | Id_buku | Nm_buku | Penerbit | Thn_terbit |
| pj001 | Boediyono | 3 | Rp.6000 | Bk001 | Matematika | Erlangga | 2010 |
| pj002 | Mulyadi | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
| pj003 | Burhanudin | 5 | Rp.9000 | Bk001 | Matematika | Erlangga | 2010 |
| pj001 | Boediyono | 1 | Rp.2000 | Bk003 | Visual basic | Gramedia | 2012 |
| pj004 | Alex | 3 | Rp.6000 | Bk004 | Jaringan | Penebar swadaya | 2008 |
| pj003 | Burhan | 1 | Rp.2000 | Bk005 | Struktur data | Smart book | 2011 |
| pj005 | Suparman | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
Id_pinjam yang sama pj003 mempunyai nama yang berbeda, hal ini disebut anomali peremajaan)
ü Anomali Penyisipan
Misalnya:
Jika terjadi penambahan buku baru, misalnya: Bk006, Algoritma Pemrograman, Mizan Pustaka, 2012. Dengan penambahan buku baru mengakibatkan terjadi kekosongan nilai pada atribut : Id_pinjam, Nm_peminjaman, Jm_hr_pl, dan biaya_punjam ( anomali penyisipan)
| Id_pinjam | Nm_peminjam | Jm_hr_pj | Biaya_pinjam | Id_buku | Nm_buku | Penerbit | Thn_terbit |
| pj001 | Boediyono | 3 | Rp.6000 | Bk001 | Matematika | Erlangga | 2010 |
| pj002 | Mulyadi | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
| pj003 | Burhan | 5 | Rp.9000 | Bk001 | Matematika | Erlangga | 2010 |
| pj001 | Boediyono | 1 | Rp.2000 | Bk003 | Visual basic | Gramedia | 2012 |
| pj004 | Alex | 3 | Rp.6000 | Bk004 | Jaringan | Penebar swadaya | 2008 |
| pj003 | Burhan | 1 | Rp.2000 | Bk005 | Struktur data | Smart book | 2011 |
| pj005 | Suparman | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
| kosong | kosog | Kosong | kosong | Bk006 | Algoritma Pemrograman | Mizan Pustaka | 2012 |
ü Anomali penghapusan
Jika Id pinjam pj002 membatalkan peminjaman dengan nama buku Basis data
| Id_pinjam | Nm_peminjam | Jm_hr_pj | Biaya_pinjam | Id_buku | Nm_buku | Penerbit | Thn_terbit |
| pj001 | Boediyono | 3 | Rp.6000 | Bk001 | Matematika | Erlangga | 2010 |
| pj002 | Mulyadi | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
| pj003 | Burhan | 5 | Rp.9000 | Bk001 | Matematika | Erlangga | 2010 |
| pj001 | Boediyono | 1 | Rp.2000 | Bk003 | Visual basic | Gramedia | 2012 |
| pj004 | Alex | 3 | Rp.6000 | Bk004 | Jaringan | Penebar swadaya | 2008 |
| pj003 | Burhan | 1 | Rp.2000 | Bk005 | Struktur data | Smart book | 2011 |
| pj005 | Suparman | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
Dengan penghapusan record tersebut mengakibatkan hilangnya datajm_hr_pj terhadap Biaya pinjam (Anomali penghapusan)
Berdasarkan beberapa anomali di atas, maka tabel/relasi tersebut harus didekomposisi (dipisahkan) berdasarkan dependensinya:
Table peminjaman
| Id_pinjam | Nm_peminjam | Jm_hr_pj | Biaya_pinjam | Id_buku | Nm_buku | Penerbit | Thn_terbit |
| pj001 | Boediyono | 3 | Rp.6000 | Bk001 | Matematika | Erlangga | 2010 |
| pj002 | Mulyadi | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
| pj003 | Burhan | 5 | Rp.9000 | Bk001 | Matematika | Erlangga | 2010 |
| pj001 | Boediyono | 1 | Rp.2000 | Bk003 | Visual basic | Gramedia | 2012 |
| pj004 | Alex | 3 | Rp.6000 | Bk004 | Jaringan | Penebar swadaya | 2008 |
| pj003 | Burhan | 1 | Rp.2000 | Bk005 | Struktur data | Smart book | 2011 |
| pj005 | Suparman | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
ü Dependensi Fungsional
1. Id_pinjam èNm_peminjam
2. Id_buku è{Nm_buku, Penerbit, Thn_terbit}
3. {Id_pinjam, Id_buku} è {Jm_hr_pj, Biaya_Pinjam}
ü Dependensi Fungsional sepenuhnya
1. Id_pinjam èNm_peminjam
2. Id_buku è{Nm_buku, Penerbit, Thn_terbit}
3. {Id_pinjam, Id_buku} è {Jm_hr_pj, Biaya_Pinjam}
ü Dependensi Transitif
Pada dependensi 3) terdapat Dependensi transitif :
{Id_pinjam, Id_buku} è {Jm_hr_pj, Biaya_pinjam}
X Y
Jm_hr_pjèBiaya_pinjam
Y Z
Berdasarkan dependensi diatas, diperoleh 4 tabel :
1. Id_pinjam èNm_peminjam
Table peminjam
| Id_pinjam | Nm_peminjam |
| pj001 | Boediyono |
| pj002 | Mulyadi |
| pj003 | Burhan |
| pj004 | Alex |
| pj005 | Suparman |
2. Id_buku è {Nm_buku, Penerbit, Thn_terbit}
Table buku
| Id_buku | Nm_buku | Penerbit | Thn_terbit |
| Bk001 | Matematika | Erlangga | 2010 |
| Bk002 | Basis data | Tinta emas | 2009 |
| Bk003 | Visual basic | Gramedia | 2012 |
| Bk004 | Jaringan | Penebar swadaya | 2008 |
| Bk005 | Struktur data | Smart book | 2011 |
3. Jm_hr_pj è Biaya_pinjam
Table biaya peminjaman
| Jm_hr_pj | Biaya_pinjam |
| 1 | Rp.2000 |
| 2 | Rp.4000 |
| 3 | Rp.6000 |
| 5 | Rp.9000 |
4. {Id_pinjam, Id_buku} è {Jm_hr_pj}
Tabel jumlah hari peminjaman
| Id_pinjam | Id_buku | Jm_hr_pj |
| pj001 | Bk001 | 3 |
| pj002 | Bk002 | 2 |
| pj003 | Bk001 | 5 |
| pj001 | Bk003 | 1 |
| pj004 | Bk004 | 3 |
| pj003 | Bk005 | 1 |
| pj005 | Bk002 | 2 |
Table UNF (UnNormalized Form)
Adalah suatu kondisi dimana sebuah table yang memiliki rangkap atau data yang terduplikasi
| Id_pinjam | Nm_peminjam | Jm_hr_pj | Biaya_pinjam | Id_buku | Nm_buku | Penerbit | Thn_terbit |
| pj001 | Boediyono | 3 1 | Rp.6000 Rp.2000 | Bk001 BK003 | Matematika Visual basic | Erlangga Gramedia | 2010 2012 |
| pj002 | Mulyadi | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
| pj003 | Burhan | 1 5 | Rp.2000 Rp.9000 | Bk005 Bk001 | Struktur data Matematika | Smart book Erlangga | 2011 2010 |
| pj004 | Alex | 3 | Rp.6000 | Bk004 | Jaringan | Penebar swadaya | 2008 |
| pj005 | Suparman | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
Bentuk normalisasi pertama:
| Id_pinjam | Nm_peminjam | Jm_hr_pj | Biaya_pinjam | Id_buku | Nm_buku | Penerbit | Thn_terbit |
| pj001 | Boediyono | 3 1 | Rp.6000 Rp.2000 | Bk001 BK003 | Matematika Visual basic | Erlangga Gramedia | 2010 2012 |
| pj002 | Mulyadi | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
| pj003 | Burhan | 1 5 | Rp.2000 Rp.9000 | Bk005 Bk001 | Struktur data Matematika | Smart book Erlangga | 2011 2010 |
| pj004 | Alex | 3 | Rp.6000 | Bk004 | Jaringan | Penebar swadaya | 2008 |
| pj005 | Suparman | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
Pada table diatas Jm_hr_pj, Biaya_pinjam, Id_buku, Nm_buku, penerbit, dan tahun menyatakan atribut yang berulang (misal boediyono meminjam 2 buku yang berbeda). Bentuk seperti ini perlu diubah menjadi bentuk normal pertama.
Sesuai dengan konsep normal pertama yaitu : “suatu relasi dikatakan dalam bentuk normal pertama jika dan hanya jika setiap atribut bernilai tunggal untuk setiap baris”.
Berikut adalah table yang sudah di normalisasi pertama:
| Id_pinjam | Nm_peminjam | Jm_hr_pj | Biaya_pinjam | Id_buku | Nm_buku | Penerbit | Thn_terbit |
| pj001 | Boediyono | 3 | Rp.6000 | Bk001 | Matematika | Erlangga | 2010 |
| pj001 | Boediyono | 1 | Rp.2000 | Bk003 | Visual basic | Gramedia | 2012 |
| pj002 | Mulyadi | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
| pj003 | Burhan | 5 | Rp.9000 | Bk001 | Matematika | Erlangga | 2010 |
| pj003 | Burhan | 1 | Rp.2000 | Bk005 | Struktur data | Smart book | 2011 |
| pj004 | Alex | 3 | Rp.6000 | Bk004 | Jaringan | Penebar swadaya | 2008 |
| pj005 | Suparman | 2 | Rp.4000 | Bk002 | Basis data | Tinta emas | 2009 |
Bentuk normalisasi kedua:
Ketentunan bentuk normal ke dua yaitu: “ suatu realasi berada dalam bentuk normal kedua jika dan hanya jika.
a. Berada pada bentuk normal pertama
b. Semua atribut bukan kunci memiliki depedensi sepenuhnya terhadap kunci primer
Pada table diatas dapat digambarkan diagram depedensi fungsional, seperti berikut ini:
Diagram depedensi fungsional diatas menjelaskan bahwa:
a. Nm_pinjam memiliki dependensi fungsional terhadap Id_pinjam.
b. Nm_buku, penerbit, Thn_terbit memiliki dependensi fungsional terhadap Id_buku.
c. Biaya_pinjam dan Jm_hr_pj mempunyai dependensi fungsional terhadap Id_pinjam dan Id_buku.
Berdasarkan diagram dependensi fungsional tersebut, pendekompossisinya menghasilkan tiga buah relasi, yaitu:
a. (Id_pinjam, Nm_pinjam)
Table peminjam
| Id_pinjam | Nm_peminjam |
| pj001 | Boediyono |
| pj002 | Mulyadi |
| pj003 | Burhan |
| pj001 | Boediyono |
| pj004 | Alex |
| pj003 | Burhan |
| pj005 | Suparman |
b. (Id_buku, Nm_buku, penerbit, Thn_trbit)
Table buku
| Id_buku | Nm_buku | Penerbit | Thn_terbit |
| Bk001 | Matematika | Erlangga | 2010 |
| Bk002 | Basis data | Tinta emas | 2009 |
| Bk001 | Matematika | Erlangga | 2010 |
| Bk003 | Visual basic | Gramedia | 2012 |
| Bk004 | Jaringan | Penebar swadaya | 2008 |
| Bk005 | Struktur data | Smart book | 2011 |
| Bk002 | Basis data | Tinta emas | 2009 |
c. (Id_pinjam, Id_buku, Jm_hr_pj, Biaya_pinjam)
Table Jumlah dan biaya peminjaman
| Id_pinjam | Id_buku | Jm_hr_pj | Biaya_pinjam |
| pj001 | Bk001 | 3 | Rp.6000 |
| pj002 | Bk002 | 2 | Rp.4000 |
| pj003 | Bk001 | 5 | Rp.9000 |
| pj001 | Bk003 | 1 | Rp.2000 |
| pj004 | Bk004 | 3 | Rp.6000 |
| pj003 | Bk005 | 1 | Rp.2000 |
| pj005 | Bk002 | 2 | Rp.4000 |
Bentuk normalisasi ketiga
Jm_hr_pj mempunyai dependensi fungsional terhadap Id_pinjam dan Id_buku. Serta Biaya_pinjam mempunyai dependensi fungsional terhadap Jm_hr_pinjam.
| Id_pinjam | Id_buku | Jm_hr_pj | Biaya_pinjam |
| pj001 | Bk001 | 3 | Rp.6000 |
| pj002 | Bk002 | 2 | Rp.4000 |
| pj003 | Bk001 | 5 | Rp.9000 |
| pj001 | Bk003 | 1 | Rp.2000 |
| pj004 | Bk004 | 3 | Rp.6000 |
| pj003 | Bk005 | 1 | Rp.2000 |
| pj005 | Bk002 | 2 | Rp.4000 |
Dengan menggunakan pendekatan dari bentuk normalisasi ketiga maka relasi pada bagian c diatas dapat didekomposisi menjadi 2 relasi :
1. (Id_pinjam, Id_buku, Jm_hr_pj)
Tabel jumlah hari pinjam
| Id_pinjam | Id_buku | Jm_hr_pj |
| pj001 | Bk001 | 3 |
| pj002 | Bk002 | 2 |
| pj003 | Bk001 | 5 |
| pj001 | Bk003 | 1 |
| pj004 | Bk004 | 3 |
| pj003 | Bk005 | 1 |
| pj005 | Bk002 | 2 |
2. (Jm_hr_pj, Biaya_pinjam)
Tabel biaya
| Jm_hr_pj | Biaya_pinjam |
| 1 | Rp.2000 |
| 2 | Rp.4000 |
| 3 | Rp.6000 |
| 5 | Rp.9000 |
