Penerapan Surrogate Key

PreWords..

  • Definisi surrogate key menurut: 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.
  • Kalo menurut: 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.
Dulu, waktu semua orang belum memiliki mobile lebih dari 1 (satu); mungkin masih jamannya fixed line kali ya? =) Nomor telepon merupakan nilai unique yang dapat dijadikan identifier bagi entitas orang. Tapi, saat ini: mungkin tiap orang memiliki 1 (Satu) nomor untuk masing-masing operator! =D fantastis!
Nomor KTP sekarang malah banyak yang bikin 1 (satu) untuk tiap daerah masing-masing. Jika ia memiliki istri di kampung katakan, di kota dan tempat mereka singgah ketika mengunjungi suatu daerah tertentu; mereka membuat masing-masing 1 (satu) KTP. Itu mungkin kenapa sebabnya pembuatan eKTP sekarang ini dirasakan kebutuhannya..
Inti dari semua ini adalah: kita membutuhkan 1 (satu) identifier unique untuk entitas tertentu!
Nah, konsep surrogate ini lah yang akhirnya menjawab kebutuhan itu. Coba searching di wikipedia mengenai hal ini dan ditemukan referensi seperti yang disebutkan di awal sesi ini. 2 (dua) referensi diambil untuk mendapatkan pemahaman lebih, dan masing-masing memiliki kesamaan; yaitu: generated by the system. Jadi, property entitas unique ini tidak boleh diGenerate oleh operator atau user manapun; ia harus bertanggung jawab agar nilai data memiliki identifier unique yang tidak boleh sama.

Kita tengok tetangga sebelah

Beberapa RDBMS memiliki thread masing-masing untuk handle issue ini, rata-rata adalah menggunakan jenis auto incremental dalam mengImplementasikan issue tersebut. Sebut saja:
  • MySQL meggunakan tipe field auto increment,
  • Oracle menggunakan thread sequential, begitu juga dengan
  • PostgreSQL yang menggunakan teknik sequential.
Silakan merujuk ke masing-masing platform jika dirasa lebih efektif dan effisien, di sini saya hanya menggunakan satu field yang saya create sendiri dengan memberikan tipe integer dan auto increment tadi. Dalam contoh ini saya menggunakan RDBMS MySQL..

Cerita saya..

Form Utama Sample
Gambar: Table Kelompok Akun..
Misalkan saya membutuhkan suatu table untuk menampung data pengelompokan akun, saya beri nama table itu: KelompokAkun. Nah, untuk keperluan tersebut saya membutuhkan 1 (satu) field untuk memuat kode akun dan 1 (satu) lagi untuk nama akun itu sendiri. Untuk kolom keterangan rasanya bersifat optional, boleh digunakan, boleh tidak.
Permasalahannya timbul ketika: user ingin mengganti kode dari akun, sebut saja dari kode numerik menjadi character (contoh: “1” untuk akun aset ingin diganti menjadi character “H” misalnya), apabila kode tersebut kita generate by system, tentu tidak mudah untuk user langsung mengganti sendiri. Dan tentu saja, kita kehilangan nilai unique dari integritas table jika kode dapat diganti, harus ada satu field lagi yang mewakili unique dari entitas ini. Oleh karena itulah surrogate key ini berperan sebagai kebutuhan tersebut.
Deskripsi Kelompok Akun
Gambar: surrogate pada table KelompokAkun..
Demikian, seperti terlihat pada gambar bahwa surrogate key tersebut tidak ditampilkan pada form. Karena surrogate key hanya dibutuhkan oleh system agar ia tetap menjaga integritas dari table ketika suatu saat nilai dari kode akun diganti.

Comments