Meskipun nama pengguna Anda unik, ada beberapa keuntungan memiliki kolom id tambahan daripada menggunakan varchar sebagai kunci utama Anda.
-
Beberapa orang lebih suka menggunakan kolom bilangan bulat sebagai kunci utama, sebagai kunci pengganti yang tidak perlu diubah, bahkan jika kolom lain dapat diubah. Meskipun tidak ada yang mencegah kunci utama alami berubah juga, Anda harus menggunakan batasan kunci asing berjenjang untuk memastikan bahwa kunci asing di tabel terkait diperbarui secara sinkron dengan perubahan tersebut.
-
Kunci utama menjadi integer 32-bit alih-alih varchar dapat menghemat ruang. Pilihan antara kolom kunci asing int atau varchar di setiap tabel lain yang mereferensikan tabel pengguna Anda bisa menjadi alasan yang bagus.
-
Memasukkan ke indeks kunci utama sedikit lebih efisien jika Anda menambahkan baris baru ke akhir indeks, dibandingkan dengan memasukkannya ke tengah indeks. Indeks dalam tabel MySQL biasanya berupa struktur data B+Tree, dan Anda dapat mempelajarinya untuk memahami kinerjanya.
-
Beberapa kerangka kerja aplikasi lebih menyukai konvensi bahwa setiap tabel dalam database Anda memiliki kolom kunci utama yang disebut
id
, daripada menggunakan kunci alami atau kunci majemuk. Mengikuti konvensi semacam itu dapat membuat tugas pemrograman tertentu menjadi lebih sederhana.
Tak satu pun dari masalah ini adalah pemecah kesepakatan. Dan ada juga keuntungan menggunakan kunci alami:
-
Jika Anda lebih sering mencari baris berdasarkan nama pengguna daripada mencari berdasarkan id, akan lebih baik jika Anda memilih nama pengguna sebagai kunci utama, dan memanfaatkan penyimpanan InnoDB yang diatur indeks. Jadikan kolom pencarian utama Anda sebagai kunci utama, jika memungkinkan, karena pencarian kunci utama lebih efisien di InnoDB (Anda harus menggunakan InnoDB di MySQL).
-
Seperti yang Anda perhatikan, jika Anda sudah memiliki batasan unik pada nama pengguna, tampaknya membuang-buang penyimpanan untuk menyimpan kolom id tambahan yang tidak Anda perlukan.
-
Menggunakan kunci alami berarti bahwa kunci asing berisi nilai yang dapat dibaca manusia, bukan id integer arbitrer. Hal ini memungkinkan kueri untuk menggunakan nilai kunci asing tanpa harus bergabung kembali ke tabel induk untuk nilai "nyata".
Intinya tidak ada aturan yang mencakup 100% kasus. Saya sering menyarankan agar Anda tetap membuka opsi, dan menggunakan kunci alami, kunci majemuk, dan kunci pengganti bahkan dalam satu database.
Saya membahas beberapa masalah kunci pengganti dalam bab "Diperlukan ID" dalam buku saya SQL Antipatterns:Avoiding Perangkap Pemrograman Basis Data .