School of Information Systems

Normalization Process

  • Pengertian Normalisasi

Normalisasi merupakan suatu teknik untuk menghasilkan kumpulan table/entitas berdasarkan pengelompokan atribut atau karakteristik data sehingga membentuk entitas yang fleksibel. Tujuan dari normalisasi yaitu untuk menghilangkan adanya redundansi data, meminimalisir kompleksitas, dan juga menghilangkan berbagai anomaly seperti update anomaly, insert anomaly, dan delete anomaly. Dengan melakukan normalisasi, kita dapat memecah table yang kompleks menjadi beberapa table yang lebih sederhana sehingga lebih mudah diatur dan dipelihara.

Terdapat beberapa tahap normalisasi yang umum dipakai antara lain UNF, 1NF, 2NF, dan 3NF. Pada tahap UNF, setiap atribut yang ada kumpulkan kedalam satu entitas. Lalu untuk memenuhi bentuk 1NF setiap atribut harus bersifat atomic, menentukan Primary Key untuk tiap table, dan juga menghilangkan derived atribut (atribut yang nilainya bergantung kepada atribut lainnya). Selanjutnya pada tahap 2NF, syarat supaya bentuk 2NF terpenuhi yaitu relasi yang ada telah memenuhi bentuk 1NF, atribut non-key memiliki full functional dependency pada Primary Key, dan kita harus menghilangkan adanya partial dependency. Partial dependency terdapat pada atribut yang bergantung sebagian pada salah satu Primary Key, oleh karena itu biasanya partial dependency biasa ditemukan pada table yang memiliki Composite Key. Lalu syarat-syarat yang diperlukan untuk memenuhi bentuk 3NF yaitu relasi ahrus telah memenuhi bentuk 2NF, kemudian kita harus menghilangkan adanya transitive dependency  terhadap Primary Key. Transitive Dependency yaitu apabila terdapat suatu atribut yang bergantung  pada atribut lain yang bukan Primary Key, dimana atribut tersebut ditentukan atau bergantung pada Primary Key pada suatu table. Contohnya yaitu jika terdapat 3 atribut yaitu A, B, C dimana atribut A adalah Primary key. Apabila A menentukan B (A->B), dan atribut B menenukan C (B->C). Maka secara tidak langsung, atribut A menentukan C (A->C). Untuk menghilangkan adanya transitive dependency, kita harus memisahkan atribut C kedalam suatu table baru. Umumnya setelah bentuk 3NF telah terpenuhi, persoalan anomaly sudah tidak akan muncul sehingga integritas data akan terjaga.

 

  • Tahapan Dalam Melakukan Normalisasi

Additional Informatio

Staff:

-StaffID

-StaffAddress

-StaffPhone

 

Untuk pemahaman lebih lanjut terkait cara melakukan normalisasi, disini kita akan melakukan proses normalisasi pada sales invoice diatas:

 

UNF: Pada tahap ini, kita akan memasukkan setiap atribut yang ada pada struk tersebut kedalam satu table yaitu Sales Invoice.

Sales Invoice

{SalesID, SalesDate, CustomerID, CustomerName, CustomerPhone, CustomerEmail, CustomerAddress, No, CakeID, CakeName, CakePrice, Quantity, SubTotal, TotalPrice, StaffName, StaffPosition}

1-NF: Pada 1NF kita akan memisahkan data yang berulang dan tidak berulang, Disini saya telah memisahkan data yang berulang dan tidak berulang menjadi 2 table yaitu table Invoice untuk data yang tidak berulang dan Invoice_Detail untuk data yang berulang. Disini dapat kita lihat bahwa data yang berulang terdapat pada atribut No, CakeID, CakeName, CakePrice, Quantity, SubTotal, dan juga TotalPrice. Disini juga bisa kita lihat bahwa saya menjadikan atribut SalesID pada table Invoice sebagai PK dan FK supaya table Invoice_Detail bisa memiliki identifier (SalesID dan CakeID) untuk setiap barisnya. Dan sekaligus SalesID disini menjadi penghubung diantara table Invoice dan table Invoice_Detail. Selain itu, pada 1NF kita juga menghilangkan derived atribut dimana derived atribut merupakan atribut yang nilainya tergantung dari atribut lainnya. Disini atribut No, SubTotal, dan juga TotalPrice termasuk derived atribut karena merupakan hasil perhitungan. Pada tahap 1NF kita juga akan memasukkan additional information yang terdapat diatas yaitu StaffID, StaffAddress, StaffPhone.

Invoice

{SalesID[PK], SalesDate, CustomerID, CustomerName, CustomerPhone, CustomerEmail, CustomerAddress, StaffID, StaffName, StaffPosition, StaffAddress, StaffPhone}

Invoice_Detail

{SalesID[PK][FK], CakeID[PK], CakeName, CakePrice, Quantity}

2-NF: Pada tahap 2NF, kita akan menentukan atribut mana yang mengandung partial dependency dan juga full functional dependency, dimana partial dependency adalah atribut yang bergantung pada sebagian. Bergantung sebagian disini maksutnya adalah atribut tersebut bergantung pada salah satu Primary Key. Sedangkan full functional dependency merupakan atribut yang bergantung penuh kepada kedua Primary Key. Disini dapat kita amati bahwa atribut CakeName dan CakePrice hanya bergantung pada salah satu Primary Key yaitu CakeID sehingga kita harus memisahkan atribut tersebut ke table baru yaitu Cake. Sedangkan atribut quantity disini bergantung kepada kedua Primary Key yaitu SalesID dan CakeID sehingga atribut quantity harus menetap pada table Invoice_Detail.

Invoice

{SalesID[PK], SalesDate, CustomerID, CustomerName, CustomerPhone, CustomerEmail, CustomerAddress, StaffID, StaffName, StaffPosition, StaffAddress, StaffPhone}

Invoice_Detail

{SalesID[PK][FK], CakeID[PK][FK], Quantity}

Cake

{CakeID[PK], CakeName, CakePrice}

Disini saya telah memisahkan atribut yang mengandung partial dependency kedalam table Cake dengan CakeID menjadi Primary Key. Disini atribut CakeName dan CakePrice saya pisahkan dari table Invoice_Detail karena atribut tersebut bergantung pada salah satu Primary Key yaitu CakeID. Lalu atribut quantity menetap di table Invoice_Detail karena atribut tersebut bergantung pada kedua Primary Key.

3-NF: Pada tahap 3NF kita akan menghilangkan transitive dependency yaitu ketika A determine B dan B determine C, secara tidak langsung A menentukan C. Itulah yang disebut transitive dependency. Disini dapat kita lihat bahwa transitive dependency yang pertama terdapat pada atribut CustomerName, CustomerPhone, CustomerEmail, CustomerAddress yang bergantung pada CustomerID sehingga kita harus memisahkan atribut tersebut kedalam table baru yaitu table Customer. Lalu transitive dependency yang kedua terdapat pada atribut StaffName, StaffPosition, StaffAddress, StaffPhone yang bergantung pada StaffID sehingga kita harus memisahkan atribut tersebut kedalam table baru yaitu table Staff. Dengan begitu bentuk 3NF akan terpenuhi.

Invoice

{SalesID[PK], SalesDate, CustomerID[FK], StaffID[FK]}

Invoice_Detail

{SalesID[PK][FK], CakeID[PK][FK], Quantity}

Cake

{CakeID[PK], CakeName, CakePrice}

Customer

{CustomerID[PK], CustomerName, CustomerPhone, CustomerEmail, CustomerAddress}

Staff

{StaffID[PK], StaffName, StaffPosition, StaffAddress, StaffPhone}

Sumber :

Connolly, T. M., & Begg, C. E. (2002). Database systems: A practical approach to design, implementation, and management. Harlow, England: Addison-Wesley.

Adrian Kristanto, Edi Purnomo Putra