BAB I NORMALISASI DATABASE

advertisement
BAB I
NORMALISASI
DATABASE
Capaian Pembelajaran:
Setelah membaca dan mengkaji bab ini, pembaca akan mampu:

Menyebutkan tujuan dan macam-macam bentuk normalisasi sesuai dengan
konsep normalisasi Edgar F. Codd

Menjelaskan tahapan normalisasi database sesuai dengan konsep normalisasi
Edgar F. Codd

Memisahkan database ke dalam beberapa tabel dengan benar berdasarkan
konsep normalisasi Edgar F. Codd

Menunjukkan kolom pada tabel yang dijadikan sebagai primary key dengan
benar berdasarkan konsep normalisasi Edgar F. Codd
1.1 PENGERTIAN NORMALISASI
Database adalah serangkaian kolom dan baris yang berisi informasi.
Masing-masing kolom berisi judul yang menggambarkan informasi di
dalamnya, sedangkan setiap baris berisi informasi itu sendiri. Dalam istilah
database, kolom disebut dengan field (judul kolom disebut field name) dan
baris disebut record. Untuk memperjelas gambaran tentang struktur database
perhatikan gambar 1.1 berikut ini.
1
Salah satu langkah yang paling penting dalam merancang database
adalah harus dipastikan bahwa data terdistribusikan di antara tabel-tabel
dengan benar. Di dalam tabel tersebut harus ditentukan struktur database
dengan benar dan tepat. Dengan struktur database yang benar dan tepat,
obyek lainnya dalam database (query, form, report, coding) akan dapat
disederhanakan. Cara mendesain tabel dengan struktur data yang benar dan
tepat disebut normalisasi database.
Menurut Microsoft, normalisasi adalah proses pengorganisasian data
dalam database. Proses pengorganisasian ini menurut Wikipedia meliputi
pengorganisasian Field dan Table dari suatu relational database.
Istilah
Field juga sering disebut dengan Attribute. Sedangkan istilah Table disebut
dengan Entitas. Normalisasi biasanya dilakukan dengan cara membagi tabel
besar menjadi tabel-tabel yang lebih kecil, membuat hubungan di antara
tabel-tabel kecil tersebut, dan membuat tabel tambahan. Tujuan pembagian
ini adalah untuk mengisolasi data agar penambahan, penghapusan, dan
modifikasi data dapat dilakukan hanya dalam satu table. Kemudian hasil
isolasi data tersebut disebarkan ke dalam database melalui hubungan yang
dibuat.
Sedangkan tujuan dari isolasi data adalah terutama untuk
menghindari adanya redudansi dan ketergantungan data yang tidak konsisten.
Jika redudansi dan ketidak konsistenan ketergantungan data tidak
dihilangkan, maka akan menimbulkan beberapa masalah. Masalah pertama
adalah menyebabkan besarnya kapasitas tempat penyimpanan (harddisk)
yang digunakan, kedua akan menimbulkan masalah dalam pemeliharaannya,
dan ketiga akan menimbulkan ketidak efisienan dalam penyuntingan data.
Sebagai contoh, jika ada perubahan alamat pelanggan, perubahan tersebut
akan jauh lebih mudah dilakukan apabila data tersebut hanya tersimpan di
tabel Pelanggan. Apalagi jika data alamat tersebut terhubung dengan data
lain, seperti data Penjualan dan data Keuangan. Hubungan ini disebut
dengan ketergantungan data.
Edgar F. Codd, penemu model database relasional, memperkenalkan
beberapa konsep normalisasi.
Normal”
(Normal
Form/NF).
Konsep tersebut diberi nama “Bentuk
Bentuk
Normal
Pertama
(1NF)
2
diperkenalkan pada tahun 1970.
Codd kemudian melanjutkan untuk
memperkenalkan Bentuk Normal Kedua (2NF) dan Bentuk Normal
Ketiga (3NF) pada tahun 1971. Pada tahun 1974, Codd bersama Raymond
F. Boyce memperkenalkan Formulir Normal Boyce-Codd (BCNF). Pada
umumnya, tabel database relasional disebut "normal" jika table tersebut
sudah memenuhi Bentuk Normal Ketiga, karena sebagian besar tabel
database dalam bentuk 3NF sudah bebas dari anomali (ketidak normalan)
dalam proses penyisipan, update, dan penghapusan.
Jika salah satu dari tiga aturan pertama bentuk normalisasi tidak
dipenuhi, harus
dipastikan
bahwa
pengorganisasian
mengantisipasi masalah yang akan terjadi.
database
dapat
Masalah yang sering terjadi
adalah kelebihan data karena adanya redudansi dan adanya ketergantungan
yang tidak konsisten.
Berikut penjelasan dari masing-masing bentuk proses normalisasi:
1. Bentuk Normal Pertama (1NF)
Tahapan yang harus dilakukan pada 1NF adalah:
a. Hilangkan pengulangan kelompok data dalam suatu tabel.
b. Buatkan tabel tersendiri untuk setiap set data terkait.
c. Identifikasikan setiap set data yang akan dijadikan sebagai primary
key.
Pada tahap ini, jangan menggunakan beberapa field dalam satu
tabel untuk menyimpan data yang sama. Misalnya, untuk menulusuri
item persediaan yang berasal dari dua sumber penjual, bisa jadi data
item persediaan tersebut tersimpan di kolom Kode Penjual 1 dan Kode
Penjual 2. Jika misalnya ada penambahan penjual ketiga, maka tidak
dianjurkan untuk menambahkan field Kode Penjual 3.
Sebagai
gantinya, letakkan semua informasi penjual dalam satu tabel terpisah
yang disebut table Penjual, kemudian hubungkan table Penjual dengan
table Persediaan berdasarkan Kode Penjual (sebagai primary key-nya).
3
2. Bentuk Normal Kedua (2NF)
Tahapan yang harus dilakukan pada 2NF adalah:
a. Buat tabel terpisah untuk sekumpulan nilai yang berlaku pada
beberapa data.
b. Hubungkan tabel tersebut melalui foreign key.
Data yang saling berkaitan harus tergantung pada primary key.
Sebagai contoh adalah Alamat Pelanggan dalam sebuah Sistem
Akuntansi.
Alamat Pelanggan tidak hanya dibutuhkan oleh tabel
Pelanggan itu sendiri, tetapi juga oleh tabel Pesanan, Pengiriman,
Faktur, Piutang, dan Pembayaran. Agar tabel Pesanan, Pengiriman,
Faktur, Piutang, dan Pembayaran dapat menggunakan data Alamat
Pelanggan di table Pelanggan, maka di masing-masing table tersebut
perlu ditambahkan field Kode Pelanggan sebagai foreign key-nya.
3. Bentuk Normal Ketiga (3NF)
Tahapan yang harus dilakukan pada 3NF adalah menghilangkan
data pada field yang tidak tergantung pada primary key.
Sebagai contoh pada Sistem Akuntansi di 2NF di atas. Jika pada
tabel Pesanan, Pengiriman, Faktur, Piutang, dan Pembayaran
terdapat data Nama, Alamat, Kota, Kode Pos, Nomor Telepon, dan
Nomor Fax Pelanggan; padahal data Nama, Alamat, Kota, Kode Pos,
Nomor Telepon, dan Nomor Fax Pelanggan sudah ada di table
Pelanggan; maka data-data tersebut harus dihilangkan dari table
Pesanan, Pengiriman, Faktur, Piutang, dan Pembayaran.
4. Normalisasi Bentuk Lainnya
Meskipun sudah ada Bentuk Normal Keempat (4NF) yang juga
disebut Boyce Codd Normal Form (BCNF), Bentuk Normal Kelima
(5NF), dan Bentuk Normal Kenam (6NF); tapi bentuk-bentuk normal
ini jarang digunakan sebagai bahan pertimbangan dalam praktek
4
mendesain suatu database.
Kecuali jika database yang didesain
sangatlah kompleks.
1.2 TAHAPAN NORMALISASI DATABASE
Perhatikan database Mahasiswa berikut. Database di bawah ini dalam
bentuk tabel yang belum dinormalisasi.
Student#
Advisor
Adv-Room Class1
Class2
Class3
------------------------------------------------------1022
Jones
412
101-07
143-01
159-02
4123
Smith
216
201-01
211-02
214-01
Langkah-langkah Normalisasinya:
1. Bentuk 1NF (Tidak boleh ada pengulangan kelompok data)
Bentuk tabel tidak boleh tiga dimensi (seperti kebanyakan
ditemukan pada spreadsheet). Melainkan harus dua dimensi. Karena
masing-masing mahasiswa mengambil beberapa kelas, maka kelas-kelas
tersebut harus ditulis dalam tabel yang terpisah. Field Class1, Class2,
dan Class3 menunjukkan suatu desain database yang bisa menimbulkan
masalah. Permasalahan yang muncul adalah jika ada seorang mahasiswa
yang akan mengambil kelas lain lagi? Misalnya Class4, Class5, atau
Class6. Apakah pengambilan kelas baru tersebut harus dilakukan dengan
menambahkankan field baru lagi? Atau bagaimana jika sebaliknya? Agar
memenuhi syarat normalisasi database yang baik, di 1NF ubahlah tabel
database mahasiswa dengan cara menghilangkan pengulangan kelompok
menjadi sebagai berikut:
Student# Advisor
Adv-Room Class#
--------------------------------------1022
Jones
412
101-07
1022
Jones
412
143-01
1022
Jones
412
159-02
4123
Smith
216
201-01
4123
Smith
216
211-02
4123
Smith
216
214-01
5
2. Bentuk 2NF (Menghilangkan redudansi data)
Perhatikan data Class# dan data Student# pada table hasil 1NF
tersebut.
Data Class# secara fungsi tidak tergantung pada Student#
(sebagai primary key), dengan demikian hubungan data antara dua field
tersebut belum belum memenuhi bentuk 2NF.
Untuk mengubahnya
menjadi 2NF, hilangkan redudansi data dan pisahkan menjadi beberapa
tabel berikut ini.
Tabel Students:
Student#
Advisor
Adv-Room
-----------------------------1022
Jones
412
4123
Smith
216
Tabel Registration:
Student#
Class#
-----------------1022
101-07
1022
143-01
1022
159-02
4123
201-01
4123
211-02
4123
214-01
3. Bentuk 3NF (Hilangkan data yang tidak tergantung pada primary key #)
Perhatikan tabel Students hasil 2NF.
Sebenarnya data nomor
ruangan pada field Adv-Room secara fungsional tergantung pada tabel
Advisor karena suatu saat bisa terjadi perubahan pada nomor ruangan
tersebut.
Untuk mengantisipasinya, data Adv-Room dipindahkan ke
tabel Advisor sebagai berikut.
Tabel Students:
Student#
Advisor
------------------1022
Jones
4123
Smith
Tabel Advisor:
Name
Room
Dept
-------------------Jones
412
42
Smith
216
42
6
1.3 LATIHAN NORMALISASI
Untuk memahami lebih jelas tentang tahapan dalam normalisasi
database, perhatikan tabel database Penjualan berikut:
Sumber: http://citozcome.blogspot.com/2009/03/contoh-studi-kasus-normalisasi.html
Berdasarkan tabel database di atas, buatlah normalisasinya (1NF, 2NF, dan
3NF).
Langkah-langkah Normalisasinya:
Sebelum dilakukan proses normalisasi, ubahlah tabel database Penjualan
menjadi sebagai berikut:
Berikut ini adalah tahapan normalisasi yang harus dilakukan:
1. Bentuk 1NF (Tidak boleh ada pengulangan kelompok data)
Pada tahapan ini, jadikan tabel database Penjualan menjadi sebagai
berikut:
7
29/05/2012
Nama
Pelanggan
Pitoyo
Beras
5070101
29/05/2012
Pitoyo
Minyak Tanah
3500
5070101
29/05/2012
Pitoyo
Buku
2000
5070102
29/05/2012
Bowo
Sabun
5600
5070102
29/05/2012
Bowo
Gula
4000
5070103
30/05/2012
Erlina
Sikat gigi
5070103
30/05/2012
Erlina
Sabun
5070103
30/05/2012
Erlina
Odol
13000
5070103
30/05/2012
Erlina
Sampo
16000
6070001
01/06/2012
Dayat
Beras
25000
6070001
01/06/2012
Dayat
Gula
4000
6070001
01/06/2012
Dayat
Bedak
1500
No Faktur
Tanggal
5070101
Nama Barang
Harga per Unit
25000
12000
5600
2. Bentuk 2NF (Tidak boleh ada pengulangan kelompok data)
Pada tahapan ini, jadikan tabel database Penjualan menjadi sebagai
berikut:
Tabel Faktur:
No Faktur
Tanggal
Nama Pelanggan
5070101
29/05/2012
Pitoyo
5070102
29/05/2012
Bowo
5070103
30/05/2012
Erlina
6070001
01/06/2012
Dayat
Tabel Barang:
Nama Barang
Beras
Harga per Unit
25000
Minyak Tanah
3500
Buku
2000
Sabun
5600
Gula
4000
Sikat gigi
12000
Odol
13000
Sampo
16000
Bedak
1500
8
9
3. Bentuk 3NF (Hilangkan data yang tidak tergantung pada primary key #)
Pada tahapan ini, jadikan tabel database Penjualan menjadi sebagai
berikut:
Tabel Faktur:
NoFaktur#
Tanggal
Pelanggan
5070101
29/05/2012
1
5070102
29/05/2012
2
5070103
30/05/2012
3
6070001
01/06/2012
4
Tabel Pelanggan: (tambahkan field Pelanggan# sebagai primary key)
Pelanggan#
Nama Pelanggan
1
Pitoyo
2
Bowo
3
Erlina
4
Dayat
Tabel Barang: (tambahkan field Barang# sebagai primary key)
Barang#
Nama Barang
Harga per Unit
1
Beras
25000
2
Minyak Tanah
3500
3
Buku
2000
4
Sabun
5600
5
Gula
4000
6
Sikat gigi
12000
7
Odol
13000
8
Sampo
16000
9
Bedak
1500
Setelah memisahkan database Penjualan ke beberapa tabel, buatlah 1
tabel lagi untuk menggabungkan ketiga tabel yang terpisah sebagai
berikut:
10
Tabel RincianFaktur:
NoFaktur#
Barang#
Kuantitas
5070101
1
1
5070101
2
1
5070101
3
1
5070102
4
1
5070102
5
1
5070103
6
1
5070103
4
1
5070103
7
1
5070103
8
1
6070001
1
1
6070001
5
1
6070001
9
1
1.4 TUGAS NORMALISASI
Untuk lebih memahami tentang tahapan dalam normalisasi database,
kerjakan tugas-tugas berikut:
1. Tugas 1
Database berikut sudah dalam bentuk 1NF.
Selanjutnya buatlah
bentuk 2NF dan 3NF. Tentukan juga nama tabel dan primary key-nya
(beri tanda # di akhir nama field sebagai petunjuk bahwa field tersebut
adalah primary key).
11
2. Tugas 2
Database berikut sudah dalam bentuk 1NF.
Selanjutnya buatlah
bentuk 2NF dan 3NF. Tentukan juga nama tabel dan primary key-nya
(beri tanda # di akhir nama field sebagai petunjuk bahwa field tersebut
adalah primary key).
3. Tugas 3
Database berikut sudah dalam bentuk 1NF.
Selanjutnya buatlah
bentuk 2NF dan 3NF. Tentukan juga nama tabel dan primary key-nya
(beri tanda # di akhir nama field sebagai petunjuk bahwa field tersebut
adalah primary key).
12
4. Tugas 4
Database berikut sudah dalam bentuk 1NF.
Selanjutnya buatlah
bentuk 2NF dan 3NF. Tentukan juga nama tabel dan primary key-nya
(beri tanda # di akhir nama field sebagai petunjuk bahwa field tersebut
adalah primary key).
5. Tugas 5
Database berikut sudah dalam bentuk 1NF.
Selanjutnya buatlah
bentuk 2NF dan 3NF. Tentukan juga nama tabel dan primary key-nya
(beri tanda # di akhir nama field sebagai petunjuk bahwa field tersebut
adalah primary key). Field baru bisa ditambahkan sebagai primary key
jika diperlukan.
6. Tugas 6
Berdasarkan 2 halaman dokumen laporan berikut, buatlah bentuk
1NF, 2NF, dan 3NF-nya. Tentukan nama tabel dan primary key-nya (beri
13
tanda # di akhir nama field sebagai petunjuk bahwa field tersebut adalah
primary key).
7. Tugas 7
Berdasarkan 2 cetakan faktur pembeliuan berikut, buatlah bentuk
1NF, 2NF, dan 3NF-nya. Tentukan tabel-tabel dan nama tabel beserta
primary key-nya (beri tanda # di akhir nama field sebagai petunjuk bahwa
field tersebut adalah primary key).
14
8. Tugas 8
Berdasarkan database Laporan Riwayat Kesehatan berikut, buatlah
bentuk 1NF, 2NF, dan 3NF-nya. Tentukan tabel-tabel dan nama tabel
beserta primary key-nya (beri tanda # di akhir nama field sebagai petunjuk
bahwa field tersebut adalah primary key). Tambahkan field lainnya yang
diperlukan.
15
Download