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.