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

Apakah string atau int lebih disukai untuk kunci asing?

Tergantung

Ada banyak diskusi yang ada pada pertukaran antara Kunci Alami dan Pengganti - Anda perlu memutuskan apa yang cocok untuk Anda, dan apa 'standar' dalam organisasi Anda.

Dalam kasus OP, ada kedua kunci pengganti (int userId ) dan kunci alami (char atau varchar username ). Kolom mana pun dapat digunakan sebagai kunci utama untuk tabel, dan dengan cara apa pun, Anda masih dapat menerapkan keunikan kunci lainnya.

Berikut adalah beberapa pertimbangan saat memilih satu atau lain cara:

Kasus untuk menggunakan Kunci Pengganti (mis. UserId INT AUTO_INCREMENT)

Jika Anda menggunakan pengganti, (mis. UserId INT AUTO_INCREMENT ) sebagai Kunci Utama, lalu semua tabel referensi tabel MyUsers maka harus menggunakan UserId sebagai Kunci Asing.

Namun Anda masih dapat menerapkan keunikan username kolom melalui penggunaan indeks unik tambahan , misalnya:

CREATE TABLE `MyUsers` (
  `userId` int NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  ... other columns
  PRIMARY KEY(`userId`),
  UNIQUE KEY UQ_UserName (`username`)

Sesuai @Dagon, menggunakan kunci primer sempit (seperti int ) memiliki keunggulan kinerja dan penyimpanan dibandingkan menggunakan nilai yang lebih luas (dan panjang variabel) seperti varchar . Manfaat ini juga memengaruhi tabel lebih lanjut yang mereferensikan MyUsers , sebagai kunci asing untuk userid akan lebih sempit (lebih sedikit byte untuk diambil).

Manfaat lain dari kunci integer pengganti adalah bahwa nama pengguna dapat diubah dengan mudah tanpa mempengaruhi tabel referensi MyUsers .Jika username digunakan sebagai kunci alami, dan tabel lainnya digabungkan ke MyUsers melalui username , sangat merepotkan untuk mengubah nama pengguna (karena hubungan Kunci Asing akan dilanggar). Jika memperbarui nama pengguna diperlukan pada tabel menggunakan username sebagai kunci asing, teknik seperti ON UPDATE CASCADE diperlukan untuk mempertahankan integritas data.

Kasus untuk menggunakan Kunci Alami (yaitu nama pengguna)

Satu kelemahan menggunakan Kunci Pengganti adalah tabel lain yang merujuk MyUsers melalui kunci pengganti harus JOIN ed kembali ke MyUsers tabel jika Username kolom diperlukan. Salah satu manfaat potensial dari kunci Natural adalah jika kueri hanya memerlukan Username kolom dari tabel yang mereferensikan MyUsers , yang tidak perlu bergabung kembali ke MyUsers untuk mengambil nama pengguna, yang akan menghemat beberapa overhead I/O.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. python mysqldb err di mac saya:Perpustakaan tidak dimuat:@rpath/libmysqlclient.21.dylib

  2. Bagaimana cara membuka MySQL saya di Raspberry Pi saya untuk Koneksi Luar / Jarak Jauh?

  3. 'max_user_connections' disetel ke 200 - masih mendapatkan kesalahan

  4. Cara membuat kata sandi enam karakter di MySQL 5.7

  5. Perilaku duplikat yang aneh dari GROUP_CONCAT dari dua LEFT JOINs dari GROUP_BYs