Learn the Rules, Break The Rules, and Create the New Ones...

Hi... My name is Rizky Prihanto. You can call me RQ, or Rizky either. I am currently living on Bandung, Indonesia. Had a lot of works and research about Enterprise Information Systems (majoring on education and e-governments). I have bunch of interests (some friends call it 'freakz') about MySQL Opensource Database and now I am one of the administrator of MySQL Indonesia User Group - the opensource community initialized by Sun Microsystems Indonesia.

My Company PT Cinox Media Insani, Bandung, Indonesia. I work here since 2008 and I take responsibility as Chief of Software Architect. My job is about planning, imaginating, fantasy-ing, concepting, and build the infrastructure of the new information systems (or app engines) which going to be implemented.

This blog This is my blog that represent my current opinion, research and experiences about anything in Software Engineering. Written since 2007 (actually) and has been vaccum for a lot of while. And now I wanna ressurrect this blog (optimistically) from the long-long-hibernation with something fresh and new ideas -- still about MySQL, software engineering, development, and may be something managerial here.

About the tagline I've learned the statement above from some paper written by Kent Beck about Extreme Programming (XP) methodology -- some sort of practical software development methods which have no boundaries. That's very inspiring me a lot. I have written some article on this blog that tell my interpretation about that statement here.

My Another Blogs I have classifying my blogs into some sort of genre. The blog that you read here right now is my primary blog that tell you (majoring) about IT stuff. But if you wanna look another side of me, you can visit here, here, here,or here. Hope it'll be interesting for some of you.

Credits I would thanks to Blogger for this great blog platform. Skinpress who designed this Wordpress template (which is bloggerized by Free Blogger Templates). My appreciate is also going to you who give your generously time for visiting my blog.

Memilih Primary Key

Temen2, ini potongan conversation yg kubaca di milis sqlserver-indo@yahoogroups.com yang kupikir cukup menarik utk disimak bersama. Pendapat2 dan pertanyaan yang diajukan akan kutulis apa-adanya tanpa ta' tambahin titik-koma nya (hehehe, bukan males ngetik... cm lg mode jd editor = on). Begini ceritanya ....

Ismail Hamzah (g**@gmail.com) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Hallo semuanya,
mohon pendapatnya: mana yang lebih baik, Primary Key menggunakan kolom khusus yang akan autoincreament atau Primary Key menggunakan kolom yang memang akan menjadi pembeda antara records (seperti No KTP, No Produk, NIM, etc).
[PK]
id (auto) | NomorIndukMahasiswa | NamaMahasiswa
-----------------------------------------------
1 | 10201002 | Ismail Hamzah
2 | 10201003 | M Indra Arifin
3 | 10201004 | F Armalivia

OR

[PK]
NomorIndukMahasiswa | NamaMahasiswa
-----------------------------------
10201002 | Ismail Hamzah
10201003 | M Indra Arifin
10201004 | F Armalivia

Thanks and best regards,
ISMAIL HAMZAH


Maximilian Raditya(m**@gmail.com) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[PK]
id (auto) | NomorIndukMahasiswa | NamaMahasiswa
-----------------------------------------------------------------
1 | 10201002 | Ismail Hamzah
2 | 10201003 | M Indra Arifin
3 | 10201004 | F Armalivia

Yang di atas menurut saya lebih baik karena ada perbedaan mendasar di antaranya, yaitu:
  • "Id" berfungsi sebagai surrogate key. Saya menggunakan surrogate key yang di-generate di level database untuk memastikan sistem dapat bekerja secara concurrent. Selain menggunakan auto identity, Anda juga dapat menggunakan GUID.
  • "NomorIndukMahasiswa" berfungsi sebagai natural key. Saya juga menggunakan natural key sebagai unique ID di domain yang bersangkutan, seperti misalnya No. KTP, No. SIM, No. Pesanan (Order, Invoice, etc), etc. yang umumnya memiliki aturan tersendiri terlepas dari surrogate key. Meskipun demikian, Anda bisa saja men-generate natural key dari surrogate key (untuk memastikan natural key tetap unik di dalam mode concurrent).
Tentang surrogate key dan natural key sendiri bisa Anda cari sambil ber-googling ria. Bagi saya, prinsipnya adalah bahwa surrogate key merupakan identitas internal (di level database/aplikasi) sedangkan natural merupakan identitas eksternal (di level business/domain yang tergantung kepada di domain mana dia digunakan).
Hope helps and CMIIW!


Kasim Wirama (w**@yahoo.com) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

sehubungan dengan surrogate key dan natural key, sebagai yang dijadikan primary key adalah kolom yang tidak mengalami perubahan.
Misalnya Nomor Induk Mahasiswa, mungkinkah NIM itu potensial mengalami perubahan ? bila tidak jadikan primary key, namun bila NIM itu potensial mengalami perubahan maka anda sebaiknya terapkan surrogate key dan natural key.


Kasim Wirama (w*@yahoo.com) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

berikut 6 kriteria sebuah kolom cocok diterapkan sebagai primary key :
1. kolom tersebut tidak mempunyai nilai NULL
2. singkat, hanya melibatkan 1 kolom
3. simple, tidak memiliki karakter khusus, case insensitive ataupun embedded spaces
4. tipe data kolom tersebut hanya angka atau char atau nchar
5. kolom tersebut tidak memiliki arti
yang memiliki arti seperti : zzyyyymmddnnnn
dimana zz=2 digit kode lokasi customer, yyyy= 4 digit tahun, mm=2 digit bulan, dd=2 digit hari, nnnn=4 digit running number, apabila customer pindah ke lokasi baru maka kode lokasi customer mungkin berubah, sehingga potensial break relationship foreign key di tabel-tabel yang terhubungan dengan tabel yang memiliki primary key.
6. kolom tersebut tidak pernah berubah.
Apabila 6 kriteria tersebut tidak dipenuhi maka gunakan surrogate key (misal autonumbering) dan terapkan unique constraint pada natural key.

Demikian dari saya.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demikian, dari mereka..
Cukup menarik. Dulu saya ngga pernah memperhatikan karakteristik natural key dan surrogate key dalam perancangan DDL saya. Conversation mereka, bener2 inspirasional. Apalagi komentar (tips) dari Pak Kasim Wirama di akhir tu conversation. Bener2 *malu* banget saya klo ngliat ERD dari sisfo-sisfo yang saya kelola dulu... hehehe. Dulu saya mikirnya cuman "ASAL UNIQUE, dah! beres!" - saya lom sempet terlintas mikirin perihal concurrency dari sudut pandang DBMS maupun dari sisi Proses Bisnis secara bersamaan. Surrogate key... Natural key... ~ sempet sih dulu skitar 3 tahun lalu mbaca2 dari tutorial nya om Djoni Darmawikarta ttg tu 'key' di artikel IlmuKomputer.com ~ tapi waktu itu aku lom ngerti bangedd apa sih yg dimaksut dgn surrogate key itu. Mungkin waktu itu aku lom ngerti dasar2 DBMS kali ye... hehehe...

Makasih banyak Bapak-Bapak, Pak Ismail, Pak Raditya, dan Pak Kasim.... Semoga temen2 yg mbaca postingan ini juga bisa lebih terinspirasi lagi dengan conversation menarik mereka.

1 comments:

Kasim Wirama mengatakan...

Saya senang anda telah mengerti dan share dari saya yang telah mencerahkan pengertian anda. Moga-moga saya lebih banyak lagi menginspirasi yang lainnya. Terima kasih atas apresiasinya.

Posting Komentar