Ada banyak pengorbanan di sini. Sebenarnya saya sering menggunakan kunci string, tetapi sering saya menyertakan pengganti kunci sekunder untuk bergabung (jelas itu akan menjadi sebaliknya jika saya menggunakan MySQL). Namun ada beberapa kasus di mana saya tidak melakukannya.
Pertama, saya penggemar menyatakan kunci alami sebagai kunci utama di mana db dapat menangani ini dengan baik (misalnya PostgreSQL). Ini membantu normalisasi dan membuat desain database lebih jelas. Kunci pengganti membuat bergabung lebih mudah.
Ada dua alasan mengapa saya biasanya menambahkan kunci pengganti:
Tidak selalu jelas apa kunci alami itu. Terkadang ini harus diubah. Mengubah kunci komposit alami ketika digunakan untuk bergabung dan integritas referensial rumit dan rentan kesalahan.
Menggabungkan kinerja pada kunci komposit bermasalah dan sekali Anda pergi ke rute kunci alami, Anda terjebak di sana.
Dalam kasus di mana kunci alami adalah definisi, kolom tunggal, dan teks, bagaimanapun, saya biasanya bergabung dengan kunci string. Alasan saya untuk melakukannya adalah bahwa ini sering menghindari bergabung saat pencarian. Penggunaan yang paling umum adalah menyediakan desain db yang tepat di sekitar kasus penggunaan jenis enum. Dalam kebanyakan kasus, ini tidak memerlukan gabung tambahan untuk permintaan rutin. Jadi di mana ini kasusnya, kunci string sebagai tombol bergabung masuk akal.
Misalnya di LedgerSMB, kami menyimpan kategorisasi akun. Ini diidentifikasi oleh referensi string. Dan beberapa data lainnya disimpan dengan referensi string yang digunakan untuk menegakkan aturan mengenai kombinasi kategorisasi yang dapat mempengaruhi akun. Satu-satunya waktu yang dibutuhkan oleh logika adalah ketika menyimpan satu set kategorisasi, jadi kami bergabung dengan kunci string.
Seperti mengapa default akan menjadi kunci integer, saya tidak berpikir itu hanya masalah ukuran indeks. Masalah besar adalah manajemen kunci. Karena kuncinya adalah arbitrer dan Anda mungkin berurusan dengan jutaan catatan, Anda harus memiliki cara untuk menghasilkan string yang unik. Ada kasus di mana orang menggunakan UUID untuk ini, tetapi ada kemungkinan tidak ada tumbukan UUID, dan di mana miliaran catatan disimpan, peluang ini menjadi cukup tinggi yang mungkin benar-benar melihat sementara peluang tabrakan dengan tipe bilangan bulat meningkat adalah nol Menurut definisi.