Normalisasi vs Denormalisasi


Salah satu konsep yang harus dimengerti oleh developer maupun implementor SQL Server BI adalah perbedaan antara normalisasi dan denormalisasi, serta kapan dan bagaimana konsep tersebut diterapkan. Kedua konsep tersebut sama-sama penting dan memiliki tempat penggunaan masing-masing. Normalisasi lekat penggunaannya dengan perancangan database dalam aplikasi OLTP. Sementara denormalisasi sebaliknya, banyak digunakan dalam perancangan database untuk keperluan OLAP.

Secara definisi sederhananya, normalisasi adalah upaya untuk menghindari duplikasi data dalam sebuah tabel dengan melakukan pemisahan informasi dari sebuah entitas ke dalam banyak tabel, dan menghubungkan tabel-tabel tersebut dengan sebuah key yang biasa disebut dengan foreign key. Sedangkan denormalisasi sebaliknya, informasi dari sebuah entitas diletakkan dalam sebuah tabel sehingga memungkinkan tabel tersebut memiliki banyak duplikasi data. Untuk memudahkan pemahaman akan hal ini, perhatikan entitas Order dan Customer dalam gambar berikut ini.

Order1 bersifat denormal karena data order dan customer dicampur dalam satu tabel, sehingga apabila seorang customer memiliki banyak order maka informasi customer tersebut (name, address, city, zip, dan country) akan terduplikasi dalam tabel Order1. Sebaliknya, Order2 bersifat normal. Informasi tentang customer dipisahkan dari tabel Order2 dan ditempatkan dalam tabel tersendiri berupa tabel Customer. Sebuah relasi kemudian dibentuk antara tabel Order2 dan tabel Customer dengan menempatkan foreign key berupa CustomerId dalam tabel Order2. Dengan demikian, apabila seorang customer memiliki banyak order, informasi tentang customer tersebut tetap ada satu record, dan tidak terduplikasi. Untuk membaca informasi customer dari sebuah order, kita memerlukan join antara tabel Order2 dan Customer.

Normalisasi cocok dan tepat digunakan untuk operasi WRITE (insert, update, delete). Hal ini karena tidak adanya duplikasi data menyebabkan operasi-operasi tersebut bisa dilakukan dengan efektif terhadap 1 record yang unik. Sedangkan denormalisasi, akan mempercepat waktu untuk operasi READ. Hal ini karena dalam tabel-tabel yang bersifat denormal, kita tidak memerlukan join antara dua tabel atau lebih. Operasi join, apalagi apabila melibatkan banyak tabel, akan memperlambat query untuk membaca informasi dalam tabel-tabel tersebut.

Konsep dasar ini penting dipahami, khususnya bagi para developer dan implementor yang berurusan dengan data yang besar dan dituntut untuk menyajikan reporting summary data-data tersebut dengan eksekusi query yang cepat. Data dihasilkan oleh aplikasi OLTP yang menambah, mengubah, dan menghapus data setiap saat. Operasi WRITE adalah bagian yang tidak terpisahkan dari aplikasi OLTP. Di sisi lain, manajemen biasanya menginginkan report dari data-data tersebut dalam bentuk summary. Misalnya data penjualan per quarter di breakdown berdasarkan kategori produk dan lokasi dari sebuah department store. Untuk keperluan reporting, justru sangat banyak dibutuhkan operasi READ.

Sangat banyak ditemui dalam dunia nyata bahwa para developer maupun analis akan langsung membuat reporting dari data-data OLTP. Jika datanya kecil hal ini tidak menjadi masalah. Lain cerita apabila kita sudah bekerja dengan data-data yang berjumlah ratusan hingga ribuan transaksi setiap hari. Pengalaman saya dari dunia industri menceritakan hal ini. Developer membuat report dengan custom report framework yang bisa menghasilkan report ke dalam Word atau Excel dari sebuah stored procedure. Stored procedure sendiri bersifat imperatif, dimana di dalamnya kita bisa melakukan apa pun: query, conditional statement, looping, bahkan bermain-main dengan cursor. Seorang developer, diberikan ‘senjata’ yang canggih berupa stored procedure tentu saja akan memanfaatkan kemampuan ‘senjata’ ini sampai full. Mereka tidak menyadari bahwa ‘senjata’ tersebut tidak tepat untuk tugas yang diberikan berupa membuat report analytic.

Akhirnya banyak ditemui sebuah report waktu eksekusinya bisa mencapai 5, 10, bahkan 30 menit. Bayangkan apabila customer (manajer) yang membutuhkan report tersebut bersifat tidak sabaran, bisa saja berakibat programmer dan analis yang membuat report tersebut kehilangan pekerjaan. Mereka tidak menyadari bahwa pergeseran pola pikir yang sederhana dari OLTP ke OLAP, dari normalisasi ke denormalisasi akan mengubah segalanya.

Di sinilah peran dari sebuah tool business intelligence seperti SQL Server 2005 BI sangat diperlukan. Lakukan transformasi dari data-data OLTP ke data-data OLAP dengan SSIS (integration service), buat cube yang berisi fact, dimension, hierarchy, dan attribute dengan SSAS (analysis service), lalu sajikan report matang dengan SSRS (reporting service), atau report setengah matang dengan intelligent client tool seperti Microsoft Excel 2007.

Tentu saja sebelum sampai ke business intelligence, kita perlu memahami perbedaan antara normalisasi dan denormalisasi.

About these ads
This entry was posted in Uncategorized and tagged . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s