- Apa itu Kunci?
- Tombol Sederhana
- Kunci Gabungan atau Gabungan
- Kunci Utama
- Penomoran dan Peningkatan Otomatis
- Dapatkah Tabel Berisi Beberapa Kunci Utama?
Sementara banyak pengembang dan administrator basis data dapat bekerja dengan primary keys
setiap hari, itu adalah topik yang menarik untuk bertanya pada diri sendiri, “Apa sebenarnya itu sebuah primary keys
dan dapat (atau seharusnya) tabel database berisi beberapa primary keys
bersamaan?”
Di bawah ini kami akan memeriksa pertanyaan-pertanyaan ini secara lebih rinci dan mencoba untuk mencapai konsensus yang wajar dan disepakati secara umum dalam komunitas pembangunan.
Apa itu Kunci?
Untuk memahami apa itu primary key
ada di tabel database, pertama kita harus mengerti sedikit tentang non-primary keys
. Sebuah key
dalam sebuah tabel hanyalah sebuah atribut yang digunakan untuk mengidentifikasi dan mengakses informasi tersebut. Sebuah tabel dapat dan sering kali memiliki beberapa kunci, seperti dalam tabel Users
keduanya email
dan username
dapat dianggap sebagai kunci.
Bergantung pada pengembang atau administrator yang Anda ajak bicara, Anda mungkin mendengar tentang berbagai jenis kunci dan definisinya, jadi kami hanya akan membahas beberapa contoh berbeda di bawah dan definisi dasar masing-masing.
Tombol Sederhana
simple key
hanyalah sebuah kunci yang hanya menggunakan satu atribut dalam tabel. Kecuali jika kita memberlakukan lebih banyak batasan pada kunci atau tabel, maka username
atribut dalam contoh di atas adalah simple key
.
Kunci Gabungan atau Gabungan
Selangkah lebih maju dari simple key
adalah concatenated
atau compound
kunci. Sesuai dengan namanya, concatenated key
adalah gabungan dari beberapa single keys
. Misalnya, sistem dapat secara otomatis menggabungkan last_name
dan year_of_birth
single keys
menjadi concatenated key
, seperti ini:smith1980
.
Kunci Utama
[primary key](https://en.wikipedia.org/wiki/Unique_key)
adalah kunci yang telah dipilih untuk menjadi kunci utama (atau utama ) atribut representatif untuk baris data tersebut. primary keys
itu unik dan atribut tersebut kemudian digunakan di seluruh database dan diakses serta diteruskan ke tabel lain sebagai atribut representatif untuk data yang bersangkutan.
Dalam praktiknya, primary keys
atribut juga ditandai sebagai NOT NULL
di sebagian besar database, artinya atribut harus selalu berisi nilai agar record dapat dimasukkan ke dalam tabel.
Sebagai contoh, baik email
atau username
simple key
bisa diberi penunjukan primary key
, tetapi biasanya praktik terbaik adalah menyetel primary keys
ke atribut yang tidak (atau tidak dapat) diubah oleh logika bisnis atau bahkan oleh individu. Misalnya, bayangkan seorang User
mendapatkan alamat email baru, yang kemudian menyebabkan semua primary key
past pengaitan yang dibuat menggunakan alamat email lama menjadi tidak valid saat menggunakan alamat email baru.
Untuk alasan ini (antara lain), sebagian besar primary keys
gunakan angka atau string unik, seperti [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)
.
Numeration dan Auto-Incrementing
Perlu juga dicatat secara singkat bahwa banyak sistem database diatur sedemikian rupa sehingga setiap tabel memiliki primary key
yang bersifat numerik dan juga bertambah secara otomatis. Ini berarti bahwa mesin database itu sendiri secara otomatis memberikan setiap record baru dalam tabel itu sebuah primary key
yang unik nilai yang secara bertahap lebih besar dari semua nilai sebelumnya. Namun, sebagian besar pengembang setuju bahwa praktik ini sudah ketinggalan zaman dan memperlihatkan kelemahan keamanan yang tidak perlu untuk sistem saat digunakan untuk beberapa tabel yang mewakili data tertentu.
Misalnya, bayangkan semua User
catatan diberi primary keys
yang bertambah secara otomatis nilai, dikenal sebagai id
atribut. Jika orang jahat menemukan bahwa id
atribut pengguna tertentu (misalnya John Smith) adalah nilai 1500
, ini sudah mengungkapkan sedikit informasi. Pertama, ini menunjukkan bahwa ada kemungkinan minimal 1499 pengguna lain dalam sistem, atau berada di beberapa titik. Ini juga berarti bahwa jika halaman pengguna John Smith dapat diakses melalui URL atau panggilan API yang berisi id
tersebut nilai 1500
, maka ada peluang bagus hanya dengan mengubah nilainya ke angka lain, seperti 1499
atau 1501
, akan mengekspos halaman pengguna lain yang mungkin tidak ingin halaman mereka diakses oleh pengunjung ini. Dengan cara ini, catatan dapat ditanyakan hanya dengan menebak id
nilai dalam skala massal.
Ini jelas merupakan contoh yang sangat sederhana, tetapi untuk alasan ini kebanyakan database modern akan menggunakan primary key
yang diacak dan unik. nilai atribut seperti UUID
saat bekerja dengan data sensitif.
Dapatkah Tabel Berisi Beberapa Kunci Utama?
Jawaban singkatnya adalah tidak , sebuah tabel tidak boleh berisi beberapa primary keys
, karena bertentangan dengan prinsip dasar desain basis data relasional (lihat:[database normalisation](https://en.wikipedia.org/wiki/Database_normalisation)
dan [Third normal form](https://en.wikipedia.org/wiki/Third_normal_form)
).
Itu adalah memungkinkan sebuah tabel memiliki beberapa candidate keys
, yang secara efektif berperilaku mirip dengan primary keys
dalam candidate key
unik, NOT NULL
, dan merupakan representasi tunggal dari record tabel tersebut.
Namun, ketika harus memilih yang mana atribut akan ditetapkan sebagai primary key
untuk tabel, pilihan berasal dari daftar semua candidate key
potential (karena itu namanya, mereka adalah kandidat untuk menjadi primary key
). Pada akhirnya, hanya satu candidate key
dipilih sebagai atribut perwakilan terbaik untuk catatan itu, untuk digunakan dalam tabel ini sebagai primary keys
dan direferensikan di tempat lain dalam database oleh tabel lain melalui foreign keys
masing-masing .