//honeypot demagogic

 Forum DhammaCitta. Forum Diskusi Buddhis Indonesia

Author Topic: Primary Key Dilemma (Numeric or Character)  (Read 7696 times)

0 Members and 1 Guest are viewing this topic.

Offline hatRed

  • KalyanaMitta
  • *****
  • Posts: 7.400
  • Reputasi: 138
  • step at the right place to be light
Primary Key Dilemma (Numeric or Character)
« on: 14 January 2009, 07:06:43 PM »
Pilih mana ya????
i'm just a mammal with troubled soul



Offline Forte

  • Sebelumnya FoxRockman
  • KalyanaMitta
  • *****
  • Posts: 16.577
  • Reputasi: 458
  • Gender: Male
  • not mine - not me - not myself
Re: Primary Key Dilemma (Numeric or Character)
« Reply #1 on: 14 January 2009, 07:09:24 PM »
Tergantung style programming seh.. kalau style gw Saya cenderung pilih char.. karena saya lebih suka 00001 daripada 1
Ini bukan milikku, ini bukan aku, ini bukan diriku
6 kelompok 6 - Chachakka Sutta MN 148

Offline tesla

  • KalyanaMitta
  • *****
  • Posts: 6.426
  • Reputasi: 125
  • Gender: Male
  • bukan di surga atau neraka, hanya di sini
Re: Primary Key Dilemma (Numeric or Character)
« Reply #2 on: 14 January 2009, 08:45:44 PM »
tergantung kebutuhan...

utk primary key yg dihandle oleh end-user, baiknya pakai (var)char...
namun perlu pertimbangan bahwa end-user sering sekali "ingin" mengubah primary keynya,
oleh karena itu, utk mencegah update yg berentetan ke-mana2, ada baiknya
buat primary key hidden dari end-user dalam type mis integer, dan utk end-user hanya diberi unique column...

mis: kalau user id di forum dc ini adalah pk, tentu yg ubah2 id dah bikin beban update lumayan...
untungnya pk nya pakai int yah ;D
Lepaskan keserakahan akan kesenangan. Lihatlah bahwa melepaskan dunia adalah kedamaian. Tidak ada sesuatu pun yang perlu kau raup, dan tidak ada satu pun yang perlu kau dorong pergi. ~ Buddha ~

Offline hatRed

  • KalyanaMitta
  • *****
  • Posts: 7.400
  • Reputasi: 138
  • step at the right place to be light
Re: Primary Key Dilemma (Numeric or Character)
« Reply #3 on: 15 January 2009, 09:02:23 AM »
nah itu dia

penggunaan char, memudahkan dalam format dan masking

penggunaan numeric, memudahkan dalam pencarian

keduanya bertolak belakang, ada kerugian dan keuntungan,

kalo pake numeric (mis sql server)

bigint = 8 bytes
int = 4 bytes
small = 2 bytes
tiny = 1 byte

charachter = n char * 1 bytes

kalo pake metode tesla kerugiannya adalah space penyimpanan yg bertambah,

kalo pake metode forte kerugiaanya adalah pencarian yg agak lama, apalagi kalo pake query yg nested join.

keuntungan metode forte, formatting lebih mudah dan kombinasi kunci yg lebih besar

keuntungan metode tesla, dalam nested join kecepatannya tentu lebih cepat.
i'm just a mammal with troubled soul



Offline Forte

  • Sebelumnya FoxRockman
  • KalyanaMitta
  • *****
  • Posts: 16.577
  • Reputasi: 458
  • Gender: Male
  • not mine - not me - not myself
Re: Primary Key Dilemma (Numeric or Character)
« Reply #4 on: 15 January 2009, 09:35:09 AM »
Yup.. agree.. bro hatred udah mengerti..

Jadi solusinya.. udah tau kelemahan dan kelebihan masing2 style..
Tinggal lihat kondisi lapangan saja..
Kondisi lapangan kenapa gw menggunakan char.. kebetulan spec komputer client waktu itu juga gw minta standar tinggi dan disetujui..

Jadi sebagai developer waktu itu.. gw berasumsi tidak akan masalah kalau menggunakan primary key karena gw membutuhkan kombinasi kunci yang benar2 unique (biasa combine datetime dan fungsi random dari VFP)
Ini bukan milikku, ini bukan aku, ini bukan diriku
6 kelompok 6 - Chachakka Sutta MN 148

Offline hatRed

  • KalyanaMitta
  • *****
  • Posts: 7.400
  • Reputasi: 138
  • step at the right place to be light
Re: Primary Key Dilemma (Numeric or Character)
« Reply #5 on: 15 January 2009, 09:48:58 AM »
begini om

kalo i juga sama saat ini, pake key yyyymmdd##0 misalnya tuk transaksi, namun kalo pake metode tesla katanya bakal lebih cepat dalam join. walau harus dikorbankan space yg digunakan tuk key yg baru misal angka 1,2,3,....,n

jadi untuk itu perlu dua informasi yg disimpan, yaitu prim key numeric dan unique field yyyymmdd##0
nah kalo menimbang2 besaran keuntungan dan kerugian, sepertinya pemakaian numeric yg lebih unggul.

saya pake kata "sepertinya" soalnya masih belum yakin neh.

dimanakah letak kerugian dari pemakaian prim key numeric?

kalo dari space, sepertiya gak terlalu terasa mengingat harga space sekarang murah banget.

tetapi menurut teori i sih kalo ada prim key dan unique key yg dipakai dalam tabel tertentu, maka dalam proses insert misalnya akan 2 kali kerja karena engine akan 2 kali cek keberadaan value field tersebut.

sedangkan pengecekan distinction pada char string tentu saja lebih lama dibanding numeric. (menurut i penyimpanan char string seperti array bytes, jadi pada saat pembandingan akan membandingkan satu persatu byte tergantung banyaknya character, hal ini yg membuat lebih lama dibanding numeric yg hanya satu kali pembandingan)
i'm just a mammal with troubled soul



Offline Forte

  • Sebelumnya FoxRockman
  • KalyanaMitta
  • *****
  • Posts: 16.577
  • Reputasi: 458
  • Gender: Male
  • not mine - not me - not myself
Re: Primary Key Dilemma (Numeric or Character)
« Reply #6 on: 15 January 2009, 10:04:20 AM »
Gw kurang tahu ya..

Cuma yang gw khawatirkan anggap kita berdua user.. mengakses database dan file yang sama, lagi input faktur yang berbeda, namun ada gak kemungkinan nge-klik "SAVE" untuk simpan faktur pada waktu yang tepat sama.. tentu nantinya akan menghasilkan nomer primary key yang sama ? padahal transaksinya berbeda.. takutnya konflik primary..

Gimana tanggapan bro hatred?
Ini bukan milikku, ini bukan aku, ini bukan diriku
6 kelompok 6 - Chachakka Sutta MN 148

Offline hatRed

  • KalyanaMitta
  • *****
  • Posts: 7.400
  • Reputasi: 138
  • step at the right place to be light
Re: Primary Key Dilemma (Numeric or Character)
« Reply #7 on: 15 January 2009, 10:31:03 AM »
dengan manual numbering format.

biasanya sih i pake double transaction,

satu di stored procedure (fungsinya buat insert)

dan satu lagi di program (client mode)
strukturnya kek gini

dlm program

Begin trans
     newKey = getNewKey (<== getNewKey memanggil stored procedure di Server buat cari newKey)
     
     succes = insert (newkey,...,field) (<== insert ini juga manggil stored proc)
     
     if succes then
              goto commit
     else
              goto roolback

     endif

Commit
......
roolback
...........



at Server

insertProc

Begin Trans
   insert.........
Commit

RollBack
i'm just a mammal with troubled soul



Offline tesla

  • KalyanaMitta
  • *****
  • Posts: 6.426
  • Reputasi: 125
  • Gender: Male
  • bukan di surga atau neraka, hanya di sini
Re: Primary Key Dilemma (Numeric or Character)
« Reply #8 on: 15 January 2009, 10:38:42 AM »
keuntungan metode tesla, dalam nested join kecepatannya tentu lebih cepat.

sebenarnya saya tidak yakin bisa (signifikan) lebih cepat  :-[

yg jadi bahan pertimbangan adalah apakah kolom tsb "mungkin" dikemudian hari diubah oleh user.
akan menjadi "nightmare" bagi programmer jika tiba2 user meminta kita utk membuat fasilitas pengubahan primary key padahal primary key itu adalah foreign key bagi puluhan atau ratusan table lainnya.
contoh kasus yg umum adalah: perubahan kode barang (atau kode data master lainnya)... jika kode barang adalah primary key yg sudah menjadi reference bagi byk table lainnya, akan menjadi pekerjaan sulit (bukan tak mungkin) utk programmer.

utk table transaksi, pada saya melihat sangat kecil kemungkinan utk dirubah dikemudian hari shg saya jg biasa pakai kode transaksi langsung sebagai primary key...
Lepaskan keserakahan akan kesenangan. Lihatlah bahwa melepaskan dunia adalah kedamaian. Tidak ada sesuatu pun yang perlu kau raup, dan tidak ada satu pun yang perlu kau dorong pergi. ~ Buddha ~

Offline tesla

  • KalyanaMitta
  • *****
  • Posts: 6.426
  • Reputasi: 125
  • Gender: Male
  • bukan di surga atau neraka, hanya di sini
Re: Primary Key Dilemma (Numeric or Character)
« Reply #9 on: 15 January 2009, 10:44:34 AM »
Gw kurang tahu ya..

Cuma yang gw khawatirkan anggap kita berdua user.. mengakses database dan file yang sama, lagi input faktur yang berbeda, namun ada gak kemungkinan nge-klik "SAVE" untuk simpan faktur pada waktu yang tepat sama.. tentu nantinya akan menghasilkan nomer primary key yang sama ? padahal transaksinya berbeda.. takutnya konflik primary..

Gimana tanggapan bro hatred?

dg mendeklarasi kolom tsb adalah "unique" (primary key otomatis unique) maka duplicate value bisa terhindari (maksudnya kalau terjadi jg, maka gagal insert)
Lepaskan keserakahan akan kesenangan. Lihatlah bahwa melepaskan dunia adalah kedamaian. Tidak ada sesuatu pun yang perlu kau raup, dan tidak ada satu pun yang perlu kau dorong pergi. ~ Buddha ~

Offline hatRed

  • KalyanaMitta
  • *****
  • Posts: 7.400
  • Reputasi: 138
  • step at the right place to be light
Re: Primary Key Dilemma (Numeric or Character)
« Reply #10 on: 15 January 2009, 10:50:53 AM »
keuntungan metode tesla, dalam nested join kecepatannya tentu lebih cepat.

sebenarnya saya tidak yakin bisa (signifikan) lebih cepat  :-[

yg jadi bahan pertimbangan adalah apakah kolom tsb "mungkin" dikemudian hari diubah oleh user.
akan menjadi "nightmare" bagi programmer jika tiba2 user meminta kita utk membuat fasilitas pengubahan primary key padahal primary key itu adalah foreign key bagi puluhan atau ratusan table lainnya.
contoh kasus yg umum adalah: perubahan kode barang (atau kode data master lainnya)... jika kode barang adalah primary key yg sudah menjadi reference bagi byk table lainnya, akan menjadi pekerjaan sulit (bukan tak mungkin) utk programmer.

utk table transaksi, pada saya melihat sangat kecil kemungkinan utk dirubah dikemudian hari shg saya jg biasa pakai kode transaksi langsung sebagai primary key...

pertimbangan itu kan gak mempermasalahkan numeric atau char string :hammer:

Gw kurang tahu ya..

Cuma yang gw khawatirkan anggap kita berdua user.. mengakses database dan file yang sama, lagi input faktur yang berbeda, namun ada gak kemungkinan nge-klik "SAVE" untuk simpan faktur pada waktu yang tepat sama.. tentu nantinya akan menghasilkan nomer primary key yang sama ? padahal transaksinya berbeda.. takutnya konflik primary..

Gimana tanggapan bro hatred?

dg mendeklarasi kolom tsb adalah "unique" (primary key otomatis unique) maka duplicate value bisa terhindari (maksudnya kalau terjadi jg, maka gagal insert)

 [at] Forte

maksudnya kemungkinan dobel prim key nya atau unique fielnya ?

 [at] tesla
nah ini juga menjadi masalah soale db enginge bakal 2 kali kerja.
i'm just a mammal with troubled soul



Offline Sukma Kemenyan

  • Global Moderator
  • KalyanaMitta
  • *****
  • Posts: 1.840
  • Reputasi: 109
Re: Primary Key Dilemma (Numeric or Character)
« Reply #11 on: 15 January 2009, 11:00:13 AM »
primary_key adalah key yang seharusnya autogenerate...
baik itu char maupun numeric...

char... lebih acceptable di mesin manapun...
int... kalao udah bigint++ (more than 8bytes) bener2x bikin gila mesin...
Code: [Select]
0xffffffffffffffff (8 bytes)
18446744073709551615

<?php 
  
echo 0xffffffffffffffff;
  
//result: 1.84467440737E+19
?>
nagh... coba dipikir... where id=1.84467440737E+19;
gila kaga tuh sql elo ntar jadinya...?

laen crita kalao elo ngirim ke SQL dalem bentuk where id=0xffffffffffffffff;
tapi... auk ah... belon pernah urusan sama numeric 4bytes++

Offline tesla

  • KalyanaMitta
  • *****
  • Posts: 6.426
  • Reputasi: 125
  • Gender: Male
  • bukan di surga atau neraka, hanya di sini
Re: Primary Key Dilemma (Numeric or Character)
« Reply #12 on: 15 January 2009, 11:05:05 AM »
keuntungan metode tesla, dalam nested join kecepatannya tentu lebih cepat.

sebenarnya saya tidak yakin bisa (signifikan) lebih cepat  :-[

yg jadi bahan pertimbangan adalah apakah kolom tsb "mungkin" dikemudian hari diubah oleh user.
akan menjadi "nightmare" bagi programmer jika tiba2 user meminta kita utk membuat fasilitas pengubahan primary key padahal primary key itu adalah foreign key bagi puluhan atau ratusan table lainnya.
contoh kasus yg umum adalah: perubahan kode barang (atau kode data master lainnya)... jika kode barang adalah primary key yg sudah menjadi reference bagi byk table lainnya, akan menjadi pekerjaan sulit (bukan tak mungkin) utk programmer.

utk table transaksi, pada saya melihat sangat kecil kemungkinan utk dirubah dikemudian hari shg saya jg biasa pakai kode transaksi langsung sebagai primary key...

pertimbangan itu kan gak mempermasalahkan numeric atau char string :hammer:

tentu donk,
soalnya utk primary key type begitu pasti pakai, unsigned integer auto increment hehehe
Lepaskan keserakahan akan kesenangan. Lihatlah bahwa melepaskan dunia adalah kedamaian. Tidak ada sesuatu pun yang perlu kau raup, dan tidak ada satu pun yang perlu kau dorong pergi. ~ Buddha ~

Offline hatRed

  • KalyanaMitta
  • *****
  • Posts: 7.400
  • Reputasi: 138
  • step at the right place to be light
Re: Primary Key Dilemma (Numeric or Character)
« Reply #13 on: 15 January 2009, 11:06:14 AM »
di cast dunk ini nya 1.84467440737E+19  :D
i'm just a mammal with troubled soul



Offline hatRed

  • KalyanaMitta
  • *****
  • Posts: 7.400
  • Reputasi: 138
  • step at the right place to be light
Re: Primary Key Dilemma (Numeric or Character)
« Reply #14 on: 15 January 2009, 11:08:58 AM »
so........

it's better to choose numeric :)

and better more to autonumber :)
i'm just a mammal with troubled soul