Key (Kunci) dalam database adalah atribut atau kumpulan atribut yang membantu kita dalam mengidentifikasi baris (row/tuple) pada sebuah tabel dan/atau bersama tabel relasinya. Key memungkinkan kita menemukan hubungan antara dua tabel atau lebih, key juga membantu kita dalam mengidentifikasi baris (row) secara unik pada sebuah tabel. Makna unik disini adalah memastikan bahwa semua nilai / data pada kolom tidak memiliki duplikasi atau kesamaan, contohnya nomor induk mahasiswa, nomor induk pegawai, dsb. Namun ada juga key yang mengijinkan kita untuk menyimpan nilai yang sama dan dapat dilakukan secara berulang dengan tujuan untuk membangun hubungan dengan satu atau lebih tabel lainnya. Ada beberapa jenis keys (kunci) pada database mysql, diantaratanya adalah sebagai berikut:
- Super key
- Candidate Key
- Primary Key
- Alternate Key
- Foreign Key
- Composite Key
Untuk memahami macam jenis key pada mysql, perhatikan tabel mahasiswa berikut:
id_mhs | npm | nama | |
---|---|---|---|
1 | 12345 | Arnold Wong | arnoldwong442@mail.com |
2 | 21922 | Arnold Wong | arnoldwong922@mail.com |
3 | 83712 | Brulee Yan | yanbrulee33@mail.com |
Super Key
Super key adalah satu atau lebih atribut pada sebuah tabel yang dapat mengidentifikasi baris (row / tuple) agar tidak memiliki nilai yang sama. Super key merupakan superset dari candidate key karena candidate key dipilih dari super key. Dari tabel diatas, kolom (attribute) yang diidentifikasikan sebagai super key adalah:
{id_mhs} {npm} {email} {id_mhs, npm} {id_mhs, name} {id_mhs, email} {npm, nama} {npm email} {id_mhs, npm, nama} {id_mhs, npm, email} {id_mhs, npm, nama, email} |
Sedangkan kolom yang diidentifikasikan sebagai candidate key adalah:
id_mhs, npm, email, |
Note: Mengapa email bisa dijadikan candidate key? Tentu saja bisa, meski satu user bisa memiliki banyak email namun ketika user tersebut melakukan registerasi maka hanya dapat menggunakan satu email sehingga tidak mungkin ada user lain yang memiliki email yang sama, sementara pada kolom nama tidak dapat dijadikan sebagai candidate key karena selain ada kemungkinan user dengan nama yang sama, bisa juga user tersebut melakukan registerasi dua kali dengan email yang berbeda.
Candidate Key
Candidate key adalah satu atau lebih atribut yang dapat mengidentifikasi baris (row / tuple) agar tidak memiliki nilai yang sama, lalu apa bedanya dengan superkey? Tabel berikut menggambarkan perbedaan candidate key dengan super key:
Key | Super Key | Candidate Key |
---|---|---|
Definisi | Super key dapat digunakan untuk mengidentifikasi semua record pada sebuah relasi5 | Candidate Key merupakan subset (himpunan bagian) dari super key |
Penggunaan | Super key tidak dapat menjadi candidate key | Semua candidate key merupakan bagian dari super key |
Seleksi | Super key dipilih untuk menghasilkan candidate key | Candidate key dipilih untuk menghasilkan primary key |
Perbandingan | Super key lebih dari candidate key | Candidate key tidak lebih dari super key |
Primary Key
Primary key adalah key yang dipilih dari candidate key sebagai kolom unik untuk mengidentifikasi baris pada sebuah tabel, kolom dengan primary key tidak boleh memiliki duplikasi data dan tidak boleh kosong (null), dari contoh diatas kolom yang dijadikan sebagai primary key adalah id_mhs, meskipun pada kolom npm dan email juga bisa namun biasanya kolom npm atau email memiliki kombinasi nilai yang rumit sehingga sulit diingat sedangkan id_mhs biasanya diisi dengan nomor urut dimulai dari satu sehingga membuatnya lebih mudah diingat. Lalu jika primary key dipilih dari candidate key, apakah ada perbedaan antara primary key dengan candidate key? Tentu ada, berikut perbedaan primary key dan candidate key:
Key | Primary Key | Candidate Key |
---|---|---|
Definisi | Mengidentifikasi record secara unik dan tidak boleh kosong (null), sebuah tabel hanya dapat memiliki satu primary key | Mengidentifikasi record secara unik, namun pada sebuah tabel dapat memiliki lebih dari satu candidate key seperti yang sudah dijelaskan |
Null | Tidak boleh kosong (null) | Boleh null |
Objektivitas | Bagian terpenting dalam membangun relasi antar tabel | Untuk menentukan kolom mana yang dapat dijadikan primary key |
Seleksi | Primary key adalah dipilih dari candidate key | Candidate key "mungkin" atau "mungkin bukan" primary key |
Alternate Key
Alternate Key merupakan candidate key yang tidak dipilih sebagai primary key sehingga dari contoh tabel diatas, selain id_mhs adalah alternate key
Composite Key
Composite key atau Composite Primary Key adalah sebuah tabel tabel yang memiliki dua primary key sekaligus yang tujuannya sama-sama mencegah record memiliki nilai duplikasi, dari contoh tabel diatas id_mhs, npm dan email bisa menjadi primary key karena ketiganya dapat diidentifikasi secara unik. Namun biasanya membuat primary key lebih dari satu ini jarang dilakukan karena mysql menyediakan unique key untuk juga mengidentifikasi record secara unik.
Foreign Key
Foreign key adalah key yang digunakan untuk menandai hubungan antara dua tabel atau lebih, tabel dengan foreign key disebut sebagai tabel anak (child) dan referensinya sebagai parent tabel. Untuk membuat foreign key diperlukan kolom yang akan menyimpan data berdasarkan tabel referensi, contohnya seperti tabel registerasi berikut:
id_reg | id_mhs | kode_reg | npm | tanggal | |
---|---|---|---|---|---|
1 | 1 | 16162716 | 12345 | arnoldwong442@gmail.com | 01/01/2021 |
2 | 1 | 16162716 | 12345 | arnoldwong442@gmail.com | 13/01/2021 |
Asumsikan tabel mahasiswa merupakan tabel induk dan tabel registerasi adalah tabel anak dimana pada tabel registerasi mengambil data dari tabel mahasiswa sebagai referensi. Berikut ini perbedaan antara Primary Key dengan Foreign Key:
Key | Primary Key | Foreign Key |
---|---|---|
Dasar | Digunakan untuk mengidentifikasi data pada tabel secara unik | Digunakan untuk menjaga hubungan antar tabel |
Null | Tidak boleh kosong (null) | Boleh null |
Duplikasi | Tidak dapat memiliki record yang sama | Dapat memiliki record yang sama |
Index | Di index | Tidak di index |
Tabel | Dapat didefinisikan pada tabel sementara (temporary) | Tidak dapat didefinisikan pada tabel sementara |
Referensi:
Difference between super key and candidate key - diakses pada 5 Mei 2021
Difference between primary key and candidate key - diakses pada 5 Mei 2021
Difference between primary key and foreign key - diakses pada 5 Mei 2021