Selama ini ketika kita merancang database dalam sebuah aplikasi pasti menggunakan auto increment di setiap table kita untuk memberi nilai unik di setiap record. Seperti contoh ketika ada user baru yang registrasi, hal ini tidak masalah dan kita cukup mengakses setiap data di dalam parameter seperti :

www.myweb.com/user.php?id=1

www.myweb.com/user.php?id=2

www.myweb.com/user.php?id=3

Penggunaan cara tersebut bisa kita pakai untuk mengenali dimana user id kita terletak di parameter id. Lalu bagaimana jika user mengubah nilai ID di parameter tersebut menjadi 4, 5, 6? user tersebut bisa dengan mudah mengetahui siapa orang yang daftar setelahnya dan siapa yang daftar sebelumnya. Atau jika ada hacker yang ingin mengumpulkan data user sebuah web dan menggunakan cara simple seperti

for ($i =1; $i < 1000; $i  ) {
echo "www.myweb.com/user.php?id=".$i;
}

Hacker tersebut dapat dengan mudah mengumpulkan data user dengan id 1-1000

CONTOH KASUS 2

Jadi gini, ada 2 aplikasi besar yang terpasang di 2 instansi atau perusahaan berbeda. Aplikasi tersebut telah memiliki data yang sangat besar di databasenya. Hal ini aman-aman saja jika kedua aplikasi tersebut menggunakan auto increment yang dimulai dari angka 1 – Seterusnya dan belum ada masalah dalam penggunaan auto increment tersebut.

Nah permasalahannya adalah, jika kita disuruh menggabungkan 2 data yang besar tersebut menjadi satu dengan alasan agar aplikasi tersebut agar terdistribusi terpusat, lalu bagaimana cara menggabungkannya? Apakah harus sekedar copy-paste saja? Tentu ini tidak akan berhasil dikarenakan banyak primary key yang sama ! Seharusnya primary key ini bersifat unique!

CONTOH KASUS 3

Penggunaan primary key tidak akan menjadi masalah jika jeda input ke database kita relatif lama. Namun apa yang terjadi jika di dalam aplikasi atau web kita ada banyak data yang ter-input ke database berjumlah besar dan salam waktu singkat contohnya kalau ada transaksi/insert sekitar 1000 DATA PERDETIK fungsi auto increment tidak akan berfungsi dengan baik.

SOLUSI : Menggunakan UUID atau Universally Unique Identifier.

Singkat kata UUID adalah sebuah kombinasi 32 karakter yang dibuat secara acak dengan algoritma tertentu. Bahkan jika ada transaksi 1000 perdetik pun akan sangat kecil kemungkinannya untuk sama. Nah maka dari itu UUID ini sangat cocok untuk dibuat unique.

Bahkan jika ada hacker yang mencoba looping data pun akan sangat sulit karena harus mengombinasika 32 karakter tersebut, tentu itu tidak mudah dan membutuhkan waktu yang lama.

Library UUID Generator untuk PHP / Laravel

Jika kita search Composer Package di Packagist library yang populer digunakan untuk membuat UUID ini adalah ramsey/uuid / website: RAMSEY/UUID / source: GitHub.

Tambahkan package ini di composer.json dengan perintah:

composer require ramsey/uuid

Kemudian untuk menggunakannya, dapat menggunakan contoh seperti yang ada di dokumentasi library ini:

UUID yang dibuat ada beberapa jenis versi (versi 1 s/d 5), masing-masing mempunyai kebutuhan sendiri-sendiri. Saya biasanya menggunakan versi 4.

Tipe Data Database

Karena kita menggunakan UUID string sebagai Primary Key, maka tipe data field yang dibuat tidak bisa Integer, namun harus Variable Character (VARCHAR), dengan panjang 32 karakter maksimum. Di Laravel, untuk Migration dan Schema Builder juga harus disesuaikan:

Eloquent ORM

Agar bisa menggunakan UUID di Model Eloquent ORM, kita harus menonaktifkan terlebih dahulu fitur auto increment, dengan cara:

Kemudian kita bisa menggunakan UUID ini pada saat Create/Update data seperti biasanya.

Oke cukup sekian dulu artikel dan tutorial saya. Terima Kasih.

1 COMMENT

  1. punya saya ada kendala

    Caught exception: When calling Ramsey\Uuid\Converter\Time\DegradedTimeConverter::calculateTime on a 32-bit system, Moontoast\Math\BigNumber must be present.

    Mohon bantuannya terimakasih

TINGGALKAN KOMENTAR

Please enter your comment!
Please enter your name here