Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Bisakah Beberapa Kunci Utama Ada di Satu Tabel?

  • 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 .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak suka pemicu basis data? Anda hanya tidak tahu bagaimana bekerja dengan mereka!

  2. Cluster Pengikut – 3 Kasus Penggunaan Utama untuk Menyinkronkan Penerapan SQL &NoSQL

  3. Apa itu Basis Data? Dan DBMS?

  4. Pengantar auto_explain:Cara Mencatat Rencana Kueri Postgres Lambat Secara Otomatis

  5. Untuk terakhir kalinya, TIDAK, Anda tidak dapat mempercayai IDENT_CURRENT()