Normalisasi akan meningkatkan data integrity tetapi akan juga meningkatkan Query complexity dan sebaliknya Denormalisasi akan mengurangi data integrity dan juga mengurangi Query Compexity. Tujuan normalisasi adalah untuk membuat agar data yang ada tidak redundan dan memiliki data integrity yang kuat sehingga ketika kita melakukan relasi antara table akan dengan mudah kita menjaga dataintegrity dan mendapatkan datanya.
Normalisasi Table sendiri terbagi atas bentuk normal ke 1 sampai bentuk normal ke 4. lebih jelasnya baca tentang konsep RDBMS.
Bentuk Table yang tidak memenuhi bentuk normal (tidak dinormalisasi contohnya)
Table : DATAKARYAWAN (No, NAMAKARYAWAN, DEPARTEMEN, SEKSI, ALAMAT, KOTA)
Dalam menentukan normalisasi suatu database akan bergantung pada Functional Dipendency dari setiap Tuple (Field/Column) yang akan menentukan seberapa normal Satu Table.
Dari Gambaran diatas Table DATAKARYAWAN merupakan Table yang tidak dinormalisasi. Karena kita tidak melihat adanya Functional Dipendency Kalo kita lihat kemungkinan ketergantungan fungsinal (yang artinya tergantung pada) yang berlaku adalah :
No -> NAMAKARYAWAN,
DEPARTEMENDEPARTEMEN ->SEKSI
NAMAKARYAWAN -> ALAMAT
KOTA -> ALAMAT
Akibat kita melakukan design table yang tidak dinormalisasi seperti diatas kita kan mengalami kesulitan untuk membentuk suatu relasi antara table.
seperti pada contoh di bawah ini:
------------------------------------------------------------------------------------------------------
|No | NamaKaryawan | Departemen | Seksi | Alamat | Kota |
------------------------------------------------------------------------------------------------------
|1. | A. Hanif | IT | Application Dev |Cideng | Jakarta |
|2. |Kusmawanti |IT |Application Dev |Cideng |Jakarta |
|3. |Boboy |Sales |Telesales |Ancol |Bekasi |
------------------------------------------------------------------------------------------------------
Jika boboy kita hapus dari Table Kita maka Data departemen Sales juga akan terhapus, berikut juga informasi Kota bekasi (Integritas data Terganggu). Padahal Departemen sales tetap ada meskipun tidak memiliki karyawan demikian juga dengan kota bekasi. Sehingga untuk kasus ini perlu di normalisasi menjadi table berikut.
Table: karyawan(NoKaryawan, Namakaryawan, KodeDepartemen, KodeSeksi, Alamat, KodeKota)
Table: Departemen(KodeDepartemen, NamaDepartement)
Table: Seksi(KodeDepartemen, KodeSeksi, NamaSeksi)
Table: Kota(KodeKota, NamaKota)
Dengan struktur hasil normalisasi ini memungkinkan data integrity akan tetap terjamin. Untuk meningkatkan performance dan data integrity ini proses normalisasi dilakukan dan sebagian besar dilakukan dalam OLTP.
Setiap ketergantungan fungsional pada colum di suatu table pada implementasinya akan memungkinkan column tersebut dinominasilkan menjadi KEY baik itu Primary Key maupun secondary Key, dan dari sinilah konsep penentuan Key dan Index dimulai pada tahapan design. Yang pada akhirnya akan mementukan waktu akses yang diperlukan untuk mendapatkan suatu informasi dari table yang kita design. sini kita baru mulai menentukan desain database yang mempertimbangkan performance.
kapan denormalisasi dilakukan? Biasanya Untuk OLAP dan DataWarehouse Pendekatan designnya berbeda dengan OLTP sebagian besar table dibuat denormalized untuk lebih meningkatkan performace. Desaign yang dibuat menggunakan Star schema atau snowflake Schema.
Lebih jelas tentang OLTP dan OLAP bisa juga dilihat di sini :
http://sqlserver-indo.net/blogs/kiki/archive/2009/12/23/must-know-olap-v-s-oltp.aspx
Semoga berguna.