Friday, December 6, 2013

"Kunci Pengganti" (Surrogate key) pemrograman (Wajib di baca bagi mahasiswa TI)

,
Dalam tulisan kali ini saya mengawali dengan "Primary key" atau "Foreign key" yang di ajarkan di pemrograman oleh para dosen, atau pun anda yang belajar dari buku pemrograman dan sebagainya.

Primary key

biasa di pakai dalam database adalah kode yang di inputkan oleh user.
Contoh:
  • untuk master Barang, yang di gunakan sebagai primary key biasanya adalah kode barang.
  • untuk master pelanggan, yang di gunakan biasanya juga kode customer.
  • Master supplier dan sebagainya biasanya juga menggunakan kode yang di inputkan oleh user.
Cara seperti ini sudah sering di pakai untuk pemrograman di awal kita belajar bahasa pemrograman. Tetapi, cara seperti ini banyak mengandung kelemahan.
  1. Kode yang sudah di inputkan oleh user, tidak akan bisa di edit, karena kode tersebut di gunakan untuk primary key, yang menjadi foreign key dari table lain. Jika kode tersebut di ganti, maka hubungan antar table akan menjadi rancu, dan beberapa form tidak akan jalan dengan baik karena primary key / foreign key yang di maksud telah di rubah.
  2. Berhubungan dengan poin pertama, karena kode tidak bisa di ubah, saat user salah memasukan kode, maka kode itu tidak bisa di edit kembali. Kalau pun bisa di ubah, itu hanya di perbolehkan saat master tersebut belum di pakai dalam table transaksi mana pun.
  3. Kalau pun berhasil menemukan algorithm agar kode bisa di rubah, hal itu menghabiskan waktu, karena harus membuat trigger dan sebagainya untuk mengganti semua foreign key yang berhubungan dengan kode table master yang di ganti.
Dalam artikel kali ini, saya ingin menjelaskan tentang:

Surrogate key.

Surrogate (1) – Hall, Owlett and Codd (1976)

A surrogate represents an entity in the outside world. The surrogate is internally generated by the system but is nevertheless visible to the user or application. 

Surrogate (2) – Wieringa and De Jonge (1991)

A surrogate represents an object in the database itself. The surrogate is internally generated by the system and is invisible to the user or application.
 Jika di jelaskan dengan bahasa sehari-hari, jadi surrogate key itu adalah key yang di generate dari program. Biasanya menggunakan auto index number. Di kolom pertama dalam database, di gunakan field yang menghasilkan angka secara berurutan. Key ini tidak di tampilkan dalam aplikasi ataupun ke user.

Contoh konkritnya:
sebuah tabel barang (item), biasanya menggunakan kode barang untuk key (primary key). Dibandingkan dengan kode barang, surrogate key menggunakan nomor generate di kolom depan kode, dengan urutan sesuai dengan jumlah record yang di inputkan.
contoh tabel:
TABLE ITEM
ITEM_ID (surrogate key) ITEM_CODE (unique key) ITEM_DESCRIPTION
1 HVS70GR Kertas HVS 70gr
2 Q80GR Kertas Quarto 80gr
3 A470GR Kertas A4 70gr

Dari tabel di atas, dapat di ketahui, primary key yang di pakai adalah ITEM_ID, sedangkan kode barang hanya di gunakan sebagai index unique. ITEM_ID tidak akan pernah muncul di interface, di layar yang di gunakan user, dan user tidak dapat merubah nilainya.

ITEM_ID yang ada di master barang, menjadi foreign key untuk tabel transaksi lainnya. Contoh tabel transaksi detail penjualan:

TABLE JUAL
JUAL_DETAIL_ID ITEM_ID QTY
1 2 5
2 3 3
3 3 4


Dari contoh tabel di atas dapat di lihat, JUAL_DETAIL_ID menjadi primary key (surrogate key) dari tabel JUAL_DETAIL, sedangkan ITEM_ID menjadi foreign key (surrogate key).
Jadi dalam satu transaksi, terdapat penjualan quarto 80gr sebanyak 5 unit, A4 70gr sebanyak 3 unit, dan A4 70gr sebanyak 4 unit. 

Kedua key tersebut tidak akan pernah di tampilkan dalam interface.


keuntungan menggunakan surrogate key:


surrogate key tidak akan berubah selama baris ada.

Ini memiliki keuntungan sebagai berikut:

  • Aplikasi tidak bisa kehilangan referensi mereka (karena identifier tidak pernah berubah).
  • Data primary key atau foreign key selalu dapat dimodifikasi (kode supplier, barang, dsb).

Performance:

untuk performa, karena surrogate key hanya menggunakan angka generate dari system, maka field ini bisa menggunakan integer 4 digit saja. Jadi saat melakukan query, proses akan lebih cepat, karena index hanya terdapat di satu kolom saja.


Kerugian:

  • Nilai yang di keluarkan oleh surrogate key tidak memiliki arti sesungguhnya, karena hanya berupa angka generate. Jadi ketika kita mencari referensi dalam tabel yang berbeda, kita perlu men-join-kan beberapa tabel agar mengerti key apa yang sedang kita pakai.
  • Karena key yang sebenarnya kita gantikan dengan surrogate key, sedangkan yang di namakan key itu harus unique, maka kita perlu memberi index (unique) pada kolom yang sebenarnya adalah key. jadi database akan membaca keseluruhan tabel jika di perlukan.
Jadi, di bandingkan dengan penggunakan primary key dengan menggunakan kode, saya pribadi lebih menyukai menggunakan surrogate key.

Nara sumber:

0 comments to “"Kunci Pengganti" (Surrogate key) pemrograman (Wajib di baca bagi mahasiswa TI)”

Post a Comment