Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL PRIMARY KEY vs kendala UNIK

Sebagai kata pengantar, perhatikan bahwa Kunci Utama tidak perlu menjadi satu kolom:dapat terdiri dari beberapa kolom:ini dikenal sebagai Kunci Komposit. Perhatikan juga bahwa tidak setiap tabel memiliki AUTO_INCREMENT /IDENTITY kolom sama sekali, dan Anda dapat memiliki UNIQUE kendala pada satu kolom di dalam kunci komposit.

  1. Tidak ada - tetapi tidak masuk akal jika DBMS melarang redundansi seperti itu karena Anda memerlukan logika dan kompleksitas tambahan untuk menangani kondisi itu, sedangkan tidak ada salahnya melakukan keduanya (selain dampak kinerja karena harus mempertahankan dua indeks).

  2. Seperti yang dikatakan di atas:karena biaya peluang mendeteksi dan mencegah redundansi itu tidak sepadan.

Hal lain yang perlu dipertimbangkan adalah bahwa definisi kunci utama dari sebuah tabel tidak dapat diubah dan oleh karena itu dapat berubah. Sebuah tabel mungkin sudah memiliki kolom dengan UNIQUE pengaturan batasan dan kemudian perancang basis data memutuskan untuk memasukkannya ke dalam definisi baru dari kunci utama - akan menjadi tidak ramah pengguna untuk meminta batasan lama dihapus terlebih dahulu, terutama jika bagian lain dari sistem aplikasi mereka bergantung pada batasan UNIK yang ada di sana (mis. 1:0..1 definisi hubungan).

(Juga, AUTO_INCREMENT tidak saling inklusif dengan UNIQUE atau PRIMARY KEY :Anda dapat menggunakan AUTO_INCREMENT dengan kolom yang tidak unik (mis. jika AUTO_INCREMENT ditambahkan setelah tabel sudah berisi data), dan sebaliknya PRIMARY KEY dapat menggunakan nilai unik yang bersumber dari tempat lain, seperti kolom identitas lain sebagai kunci asing (kunci primer gabungan dapat berisi kunci asing!) atau sumber data "alami", seperti menggunakan Nomor Jaminan Sosial AS sebagai Kunci Utama (tentu saja Anda harus tidak pernah lakukan ini dalam kenyataan)).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. objek django+mysql='DatabaseWrapper' tidak memiliki atribut 'Database' error

  2. gem install mysql:Gagal membangun ekstensi asli permata (Mac Lion)

  3. mendapat pilihan yang melakukan 10 kueri dalam doktrin (Symfony)

  4. Fungsi tanggal mysql tidak berfungsi kurang dari

  5. bisakah kita memasukkan ke dalam dua tabel dengan pernyataan sql tunggal?