Berkenalan dengan Primary Key, Foreign Key, Unique Key dan Index

Tak kenal maka tak sayang, begitulah pepatah berpetuah.. pepatah ini tidak hanya berlaku pada berkenalan dengan manusia saja, tapi juga pada materi-materi database. Postingan ini merupakan kelanjutan dari postingan tahun kemarin tentang constraint table,

Dalam Basisdata (database) MySQL dikenal beberapa istilah key dalam pembuatan table, yaitu: primary key, foreign key, unique key dan index.
Masing- masing key tersebut ada perbedaan- perbedaan.

Apa yah perbedaannya??

Primary key atau Unique key merupakan kunci yang secara unik mengidentifikasi baris pada table. Primary key atau unique key dapat diterapkan pada satu atau lebih field. Apabila primary key atau unique key diterapkan pada satu atau lebih field maka pada field tersebut tidak boleh bernilai sama untuk seluruh baris pada table.
Yang membedakan antara primary key dengan unique key adalah setiap kita memberikan constraint primary key pada field maka constraint  NOT NULL akan diberikan pada field tersebut secara otomatis. Sedangkan pada unique key tidak.

Perhatikan table di bibawah ini, Tujuan dari table ini adalah agar tidak ada id_user yang sama dan tidak ada pula email yang sama di dalam table tersebut.

Pada table di atas  id_user berfungsi sebagai PRIMARY KEY, sedangkan email berfungsi sebagai UNIQUE

Lalu mengapa email tidak memakai PRIMARY KEY saja?

Apabila id_user  PRIMARY KEY dan email PRIMARY KEY. Penjelasannya adalah seperti di bawah ini:

Misalnya saja kita memasukkan data
id_user = admin
email = saya@gmail.com

Maka data akan masuk ke dalam table karena ada salah satu data (email) yang tidak sama dengan email di dalam table, meskipun id_user sama dengan id_user di dalam table (admin). Kondisi ini adalah salah, karena tidak sesuai dengan tujuan table di buat.

Sedangkan, apabila id_user  PRIMARY KEY dan email UNIQUE

Maka, misalnya saja kita memasukkan data
id_user = admin
email = saya@gmail.com

Maka data akan di tolak masuk ke dalam table karena id_user(admin) yang akan di masukkan sama dengan id_user yang telah ada di dalam table. Meskipun email berbeda dengan email yang telah ada di dalam table. Kondisi ini benar karena sesuai dengan tujuan table di buat dimana tak di ijinkan jika ada id_user maupun email yang sama.

Kemudian ada istilah foreign key. Dengan adanya foreign key ini dapat terlihat adanya hubungan antara satu table dengan table yang lain. Foreign key mengidentifikasi satu atau lebih kolom pada satu table ( dalam kata lain bisa disebut dengan table referensi ) mengarah dari satu atau lebih table lainnya . Dengan adanya constraint foreign key pada satu kolom maka data pada kolom table referensi harus terdapat pada table induk.
Pada versi MySQL 5.0, foreign key hanya dapat diterapkan pada table dengan tipe InnoDB namun pada versi selanjutnya dapat diterapkan juga pada MyISAM. Kemudian field dengan tipe BLOB atau TEXT tidak dapat diberikan constraint foreign key.

Untuk optimalisasi database kita dapat menggunakan Index. Index mampu meningkatkan kecepatan operasi pada suatu table (terutama operasi SELECT). Pada MySQL, Index dan data dari suatu table tersimpan secara terpisah. Dengan kata lain membutuhkan ruang penyimpanan yang lebih banyak.  Kesalahan pemberian Index pada suatu kolom dapat memperlambat operasi pada suatu table karena index dibaca terlebih dahulu untuk mendapatkan data.

Gunakan foreign key pada kolom yang sering digunakan unutk pencarian data.

Referensi:
MySQL Manual Reference
Wikipedia.org
gambar : kangnanto.com

Share

Leave a Reply

Your email address will not be published. Required fields are marked *