Memahami Pengertian Normalisasi Database
Normalisasi Database
Normalisasi adalah salah satu pendekatan logical design dari suatu database relational, dan tampaknya
sedikit memiliki kemiripan dengan model ER.
Disain database relational dengan pendekatan normalisasi dan disain ER yang teliti akan menghasilkan
database relational yang hampir identik, pada kenyataannya dua pendekatan (normalisasi dan disain ER)
tersebut saling memperkuat.
Pendekatan Normalisasi
Berikut adalah yang dilakukan dengan pendekatan normalisasi:
1. Disainer membuat model berupa tabel (universal table) berdasarkan situasi sebenarnya,
dengan;
a. Memperhatikan aturan tentang keterkaitan item data tersebut.
b. Mengisikan data pada kolom‐kolomnya, nama kolom tersebut akan menjadi nama
kolom pada tabel‐tabel relational.
2. Membuat tabel‐tabel dalam bentuk normal (normal form tables), sesuai aturan normalisasi,
yaitu;
a. First normal form (1NF) Bentuk normal pertama.
b. Second normal form (2NF) Bentuk normal kedua.
c. Third normal form (3NF) Bentuk normal ketiga.
d. Boyce‐Codd normal form (BCNF) Bentuk normal Boyce‐Codd.
Ket: Sebenarnya masih ada bentuk normal 4NF dan 5NF, namun bentuk normal ini tidak umum
dilakukan, untuk itu tidak dibahas di sini.
Dari model berupa universal tabel (berdasarkan situasi sebenarnya) dibuat tabel‐tabel dari hasil
penerapan aturan 1NF. Setelah tabel‐tabel dalam bentuk 1NF, selanjutnya diterapkan aturan untuk
membuat tabel‐tabel dalam bentuk 2NF dan 3NF. Dikatakan 2NF dan 3NF, karena biasanya disainer
database melakukan tahap ini secara kontinyu (hingga bentuk 3NF dicapai).
Database yang berisi item data awal yang semuanya di dalam satu tabel (universal table/tabel universal)
dan ketentuan keterkaitan pada item data tersebut, melalui prosedur‐prosedur sesuai ketentuan (1NF,
2NF dan 3NF) dihasilkan database yang terdiri dari beberapa tabel (equivalent tabel universalnya) yang
semua tabel dalam database tersebut sudah dalam bentuk 3NF.
1NF
Suatu relasi/tabel dikatakan dalam 1NF jika dan hanya jika sifat dari setiap relasi atributnya bersifat
atomik. Atom adalah zat terkecil yang masih memiliki sifat induknya, bila dipecah lagi maka ia tidak
memiliki sifat induknya.
Suatu tabel dikatakan sudah dalam first normal form (1NF) jika tabel tersebut tidak memiliki field
multivalue.
2NF
Sebuah relasi/tabel dikatakan dalam 2NF jika tabel tersebut dalam 1NF dan setiap kolom bukan kunci
tergantung secara fungsional pada kunci utama/primary key (Functional Dependency/FD).
Definisi FD (Functional Dependency)
AB ,dibaca: “A functionally determines B” atau “B is functionally dependent on A”.
Misal terdapat tabel T yang terdiri dari dua kolom (kolom A dan B), dikatakan AB, “jika dan hanya jika
untuk setiap set baris yang mungkin ada pada tabel T, untuk nilai yang sama pada kolom A harus
terdapat nilai yang sama untuk kolom B”.
Atau secara formal dinyatakan:
jika terdapat 2 baris r1 dan r2 dalam T dikatakan AB, “jika r1(A)= r2(A), maka r1(B)= r2 (B)”.
Contoh:
T1 T2 T3
Row # A B A B A B
1 x1 y1 x1 y1 x1 y1
2 x2 y2 x2 y4 x2 y4
3 x3 y1 x1 y1 x1 y1
4 x4 y1 x3 y2 X3 y2
5 x5 y2 x2 y4 X2 y4
6 x6 y2 x4 y3 X4 y4
Tabel T1
Apakah AB ?
Dengan memeriksa untuk setiap pasang baris r1 dan r2, jika r1(A)= r2(A), maka r1(B)= r2(B).
Karena nilai tiap baris pada kolom A adalah unique maka sudah pasti untuk nilai A=x1 maka nilai
B=y1, demikian juga seterus‐nya untuk nilai A=x2 maka nilai B=y2, A=x3 maka B=y1.
Maka: AB
Apakah BA ?
Dengan memeriksa untuk setiap pasang baris r1 dan r2, jika r1(B)= r2(B), maka r1(A)= r2(A).
Perhatikan nilai tiap baris pada kolom B tidak unique berarti ada kemungkinan hasil
pemeriksaan tidak seperti yang diharapkan.
Perhatikan nilai B dan A pada pasangan Row# 1 (sebagai r1) dan Row# 3 (sebagai r2), r1(B)=y1
dan r2(B)=y1, tetapi r1(A)=x1 dan r2(A)=x3, berarti prinsip “jika r1(B)= r2(B), maka r1(A)= r2(A)”
tidak terpenuhi,
Maka: B –/–> A
Tabel T2
Apakah AB ?
Dengan memeriksa untuk setiap pasang baris r1 dan r2, jika r1(A)= r2(A), maka r1(B)= r2(B).
Perhatikan nilai tiap baris pada kolom A tidak unique (terdapat duplikat nilai kolom A pada Row#
1 dengan Row# 3 dan pada Row# 2 dengan Row# 5), berarti ada kemungkinan hasil pemeriksaan
tidak seperti yang diharapkan.
Perhatikan nilai A dan B pada pasangan Row# 1 (sebagai r1) dan Row# 3 (sebagai r2), r1(A)=x1
dan r2(A)=x1, dengan r1(B)=y1 dan r2(B)=y1,
Perhatikan nilai A dan B pada pasangan Row# 2 (sebagai r1) dan Row# 5 (sebagai r2), r1(A)=x2
dan r2(A)=x2, dengan r1(B)=y4 dan r2(B)=y4
berarti prinsip “jika r1(A)= r2(A), maka r1(B)= r2(B)” terpenuhi.
Maka: AB
Apakah BA ?
Dengan memeriksa untuk setiap pasang baris r1 dan r2, jika r1(B)= r2(B), maka r1(A)= r2(A).
Perhatikan nilai tiap baris pada kolom B tidak unique (terdapat duplikat nilai kolom B pada Row#
1 dengan Row# 3 dan pada Row# 2 dengan Row# 5), berarti ada kemungkinan hasil pemeriksaan
tidak seperti yang diharapkan.
Perhatikan nilai A dan B pada pasangan Row# 1 (sebagai r1) dan Row# 3 (sebagai r2), r1(B)=y1
dan r2(B)=y1, dengan r1(A)=x1 dan r2(A)=x1,
Perhatikan nilai A dan B pada pasangan Row# 2 (sebagai r1) dan Row# 5 (sebagai r2), r1(B)=y4
dan r2(B)=y4, dengan r1(A)=x2 dan r2(A)=x2,
berarti prinsip “jika r1(B)= r2(B), maka r1(A)= r2(B)” terpenuhi
Maka: BA
Tabel T3
Apakah AB ?
Dengan memeriksa untuk setiap pasang baris r1 dan r2, jika r1(A)= r2(A), maka r1(B)= r2(B).
Perhatikan nilai tiap baris pada kolom A tidak unique (terdapat duplikat nilai kolom A pada Row#
1 dengan Row# 3 dan pada Row# 2 dengan Row# 5), berarti ada kemungkinan hasil pemeriksaan
tidak seperti yang diharapkan.
Perhatikan nilai A dan B pada pasangan Row# 1 (sebagai r1) dan Row# 3 (sebagai r2), r1(A)=x1
dan r2(A)=x1, dengan r1(B)=y1 dan r2(B)=y1,
Perhatikan nilai A dan B pada pasangan Row# 2 (sebagai r1) dan Row# 5 (sebagai r2), r1(A)=x2
dan r2(A)=x2, dengan r1(B)=y4 dan r2(B)=y4
berarti prinsip “jika r1(A)= r2(A), maka r1(B)= r2(B)” terpenuhi.
Maka: AB
Apakah BA ?
Dengan memeriksa untuk setiap pasang baris r1 dan r2, jika r1(B)= r2(B), maka r1(A)= r2(A).
Perhatikan nilai tiap baris pada kolom B tidak unique (terdapat duplikat nilai kolom B pada Row#
1 dengan Row# 3 dan pada Row# 2, Row# 5 dengan Row# 6), berarti ada kemungkinan hasil
pemeriksaan tidak seperti yang diharapkan.
Perhatikan nilai A dan B pada pasangan Row# 1 (sebagai r1) dan Row# 3 (sebagai r2), r1(B)=y1
dan r2(B)=y1, dengan r1(A)=x1 dan r2(A)=x1,
Perhatikan nilai A dan B pada pasangan Row# 2 (sebagai r1) dan Row# 5 (sebagai r2), r1(B)=y4
dan r2(B)=y4, dengan r1(A)=x2 dan r2(A)=x2,
Perhatikan nilai A dan B pada pasangan Row# 2 (sebagai r1) dan Row# 6 (sebagai r2), r1(B)=y4
dan r2(B)=y4, dengan r1(A)=x2 dan r2(A)=x4,
berarti prinsip “jika r1(B)= r2(B), maka r1(A)= r2(B)” tidak terpenuhi
Maka: B –/–> A
3NF
Sebuah relasi/tabel dikatakan dalam 3NF jika tabel tersebut dalam bentuk 2NF dan setiap kolom bukan
kunci (primary key) tidak memiliki hubungan yang transitif terhadap kolom kunci (primary key).
Ini berati bahwa setiap kolom yang bukan kunci harus tergantung pada kolom kunci utama/primary key
secara menyeluruh. Maksudnya;
Jika ada kolom (misal; kolom D) bukan kunci sebenarnya tergantung kepada kolom lain yang
bukan kolom kunci (misal; kolom N), tapi karena kolom N tergantung pada kolom kunci (misal;
kolom K), maka kolom D dikatakan memiliki hubungan transitif terhadap kolom K.
Atau secara formal dituliskan;
K N, D
K N
N D
jika primary key adalah berupa kombinasi kolom maka kolom yang bukan primary key tidak
boleh tergantung hanya pada salah satu kolom primary key (no transitif dependency).
K1, K2 L, M
K1 N
Contoh Kasus
1. Perhatikan formulir faktur berikut;
Coba buat diagram ER berdasarkan formulir faktur tersebut!
PT. Mutiara Mukti
Jalan MM I No. 01
Faktur Pembelian Barang
Nomor Faktur : 273 Tanggal : 02 / 05 / 87
Kode Supplier : 335 Nama Supplier : PT. Indah
Kode Barang Nama Barang Jumlah
B2 Meja 3
B3 Kursi 2
B4 Lemari 4
B5 Rak Buku 4
B6 Televisi 2
Pendekatan normalisasi:
1. Model berupa tabel berdasarkan situasi sebenarnya, kemudian model ini digunakan sebagai ilustrasi
untuk pembahasan normalisasi dengan aturan normalisasi (1NF, 2NF, 3NF dan BCNF), kita gunakan
data dari formulir faktur pembelian di atas. Dari sebanyak 3 Faktur pembelian tersebut diperoleh
data pembelian sebagai berikut:
nomor_faktur tanggal kode_
supplier nama_supplier kode_brg nama_bar
ang jumlah
273 020587 335 PT. Indah B2 Meja 3
B3 Kursi 2
B4 Lemari 4
B5 Rak Buku 4
B6 Televisi 2
274 020587 275 PT. Permai B2 Meja 3
B3 Kursi 5
275 020687 223 PT. Asri B6 Televisi 2
2. Membuat tabel‐tabel dalam bentuk normal (normal form tables), sesuai aturan normalisasi (1NF,
2NF, 3NF, BCNF)
1NF
Suatu tabel dikatakan sudah dalam bentuk first normal form (1NF) jika tabel tersebut tidak memiliki field
multivalue. Jika ada kolom multivalue, maka kolom harus dipisah dengan membuat tabel lain.
Perhatikan tabel pembelian di atas, pada tabel tersebut terdapat kolom yang memiliki multivalue (yaitu;
kode_brg, nama_barang, jumlah), maka kolom tersebut harus dipisah dengan membuat tabel lain dan
menyertakan kolom primary key dari tabel asal sebagai foreign key pada tabel baru tersebut.
pembelian
nomor_f
aktur tanggal kode_
supplier
nama_sup
plier
kode_b
rg
nama_bar
ang jumlah
273 020587 335 PT. Indah B2 Meja 3
B3 Kursi 2
B4 Lemari 4
B5 Rak Buku 4
B6 Televisi 2
274 020587 275 PT. Permai B2 Meja 3
B3 Kursi 5
275 020687 223 PT. Asri B6 Televisi 2
pembelian daftar_barang_pembelian
nomor_f
aktur tanggal kode_
supplier
nama_sup
plier
kode_b
rg
nama_bar
ang jumlah nomor
_faktur
273 020587 335 PT. Indah B2 Meja 3 273
274 020587 275 PT. Permai B3 Kursi 2 273
275 020687 223 PT. Asri B4 Lemari 4 273
B5 Rak Buku 4 273
B6 Televisi 2 273
B2 Meja 3 274
B3 Kursi 5 274
B6 Televisi 2 275
2NF
Sesuai aturan Functional Dependency (FD), tabel/relasi dalam 1NF dan setiap kolom bukan kunci
tergantung secara fungsional pada kunci utama/primary key. Ini berati bahwa setiap kolom yang bukan
kunci harus tergantung secara fungsional pada kolom kunci utama/ primary key.
jika ada kolom yang tidak tergantung secara fungsional terhadap primary key, maka kolom harus
dipisah dengan membuat tabel lain (tabel baru) dan pada tabel baru tersebut juga tambahkan kolom
untuk primary key dari tabel asal (sebagai relasi terhadap tabel asal).
Perhatikan tabel yang sudah dalam 1NF berikut;
pembelian daftar_barang_pembelian
nomor_f
aktur tanggal kode_
supplier
nama_sup
plier
kode_b
rg
nama_bar
ang jumlah nomor
_faktur
273 020587 335 PT. Indah B2 Meja 3 273
274 020587 275 PT. Permai B3 Kursi 2 273
275 020687 223 PT. Asri B4 Lemari 4 273
B5 Rak Buku 4 273
B6 Televisi 2 273
B2 Meja 3 274
B3 Kursi 5 274
B6 Televisi 2 275
Pada tabel pembelian terlihat dengan jelas bahwa nomor_faktur adalah unique, sehingga bisa dipastikan
bentuk FD‐nya;
Nomor_faktur tanggal, kode_suplier, nama_suplier
Pada tabel daftar_barang_pembelian bentuk FD (Functional Dependency)‐nya adalah;
Kode_brg nama_barang
Kode_brg –/–> jumlah , karena untuk setiap set baris dimungkinkan untuk suatu nilai yang sama pada
kolom kode_brg, terdapat nilai yang berbeda pada kolom jumlah. (untuk barang yang sama,
dimungkinkan untuk dibeli dengan jumlah pembelian yang berbeda).
Perhatikan nilai pada Row 2 dan Row 7, kolom kode_brg Row 2 = kode_brg Row 7 = B3, tetapi kolom
jumlah Row 2 ≠ kolom jumlah Row 7 (nilai jumlah Row 2 = 2 , nilai jumlah Row 7 = 5).
Kode_brg –/–> nomor_faktur , karena untuk setiap set baris dimungkinkan untuk suatu nilai yang sama
pada kolom kode_brg, terdapat nilai yang berbeda pada kolom nomor_faktur. (untuk barang yang
sama, dimungkinkan untuk dibeli beberapa kali dan tercatat pada faktur yang berbeda).
Perhatikan nilai pada Row 2 dan Row 7, kolom kode_brg Row 2 = kode_brg Row 7 = B3, tetapi kolom
nomor_faktur Row 2 ≠ kolom nomor_faktur Row 7 (nomor_faktur Row 2 = 273 , jumlah Row 7 = 274).
Maka berarti kolom jumlah dan nomor_faktur tidak tergantung secara fungsional terhadap primary key.
Dengan demikian;
jumlah dan nomor_faktur harus dipindahkan ke tabel baru, dan tambahkan primary key tabel
asal (kode_brg) ke tabel baru tersebut (sebagai relasi dengan tabel asal).
Pada tabel baru tersebut tentukan primary key nya, sehingga atribut non primary key akan
tergantung secara fungsional pada primary key. Dalam hal ini primary key‐nya adalah kombinasi
dari kolom kode_brg dan nomor_faktur, sehingga FD:
kode_brg, nomor_faktur jumlah
Berikan nama tabel baru dan tabel yang mengalami perubahan dengan nama yang sesuai
dengan ini datanya.
Sehingga tabel‐tabel sekarang akan menjadi seperti berikut:
daftar_barang daftar_pembelian
kode_
brg
nama_bar
ang
kode
_brg
nomor
_faktur jumlah
B2 Meja B2 273 3
B3 Kursi B3 273 2
B4 Lemari B4 273 4
B5 Rak Buku B5 273 4
B6 Televisi B6 273 2
B2 274 3
B3 274 5
B6 275 2
pembelian
nomor_f
aktur tanggal kode_
supplier
nama_sup
plier
273 020587 335 PT. Indah
274 020587 275 PT. Permai
275 020687 223 PT. Asri
3NF
Sesuai aturan 3NF, tabel/relasi dalam bentuk 2NF dan setiap kolom bukan kunci tidak memiliki
hubungan yang transitif terhadap primary key. Ini berati bahwa setiap kolom yang bukan kunci harus
tergantung pada kolom kunci utama/primary key secara menyeluruh.
Maksudnya;
Jika ada kolom (misal; kolom D) bukan kunci sebenarnya tergantung kepada kolom lain yang
bukan kolom kunci (misal; kolom N), tapi karena kolom N tergantung pada kolom kunci (misal;
kolom K), maka kolom D dikatakan memiliki hubungan transitif terhadap kolom K.
Atau secara formal dituliskan;
jika primary key adalah berupa kombinasi kolom maka kolom yang bukan primary key tidak
boleh tergantung hanya pada salah satu kolom primary key (no transitif dependency).
Jika ada kolom yang memiliki hubungan secara transitif terhadap primary key, maka kolom tersebut
harus dipisah dengan membuat tabel lain (tabel baru) dan pada tabel baru tersebut juga tambahkan
kolom sebagai tempat bagi kolom ketergantungannya dan menjadi primary key pada tabel baru,
kolom tersebut akan menjadi relasi yang menghubungkan tabel asal dengan tabel baru.
Perhatikan tabel yang sudah dalam 2NF berikut;
Pada tabel pembelian, jelas terlihat bahwa kolom nama_suppler sebenarnya tergantung pada kolom
kode_supplier, karena kolom kode_supplier tergantung pada nomor_faktur (primary_key) maka
nama_supplier juga tergantung pada nomor_faktur tetapi ketergantungannya hanya transitif, melalui
kolom kode_supplier.
nomor_faktur kode_supplier, nama_supplier
kode_supplier nama_supplier
Karena nama_supplier tergantung pada kode_supplier, maka pada tabel baru harus disertakan kolom
kode_supplier sebagai primary key pada tabel baru. Sedangkan kolom kode_supplier pada tabel
pembelian tidak dihapus (tetap ada, sebagai relasi dengan tabel baru).
pembelian
nomor_f
aktur tanggal kode_
supplier
nama_sup
plier
273 020587 335 PT. Indah
274 020587 275 PT. Permai
275 020687 223 PT. Asri
daftar_barang daftar_pembelian
kode_
brg
nama_bar
ang
kode
_brg
nomor
_faktur jumlah
B2 Meja B2 273 3
B3 Kursi B3 273 2
B4 Lemari B4 273 4
B5 Rak Buku B5 273 4
B6 Televisi B6 273 2
B2 274 3
B3 274 5
B6 275 2
Sehingga tabel‐tabel tersebut sekarang akan menjadi seperti berikut:
pembelian supplier
nomor_f
aktur tanggal kode_
supplier
kode_
supplier
nama_sup
plier
273 020587 335 335 PT. Indah
274 020587 275 275 PT. Permai
275 020687 223 223 PT. Asri
daftar_barang daftar_pembelian
kode_
brg
nama_bar
ang
kode
_brg
nomor
_faktur jumlah
B2 Meja B2 273 3
B3 Kursi B3 273 2
B4 Lemari B4 273 4
B5 Rak Buku B5 273 4
B6 Televisi B6 273 2
B2 274 3
B3 274 5
B6 275 2
Posting Komentar untuk "Memahami Pengertian Normalisasi Database "