Saya mengikuti beberapa aturan:
- Kunci utama harus sekecil mungkin. Lebih suka tipe numerik karena tipe numerik disimpan dalam format yang jauh lebih ringkas daripada format karakter. Ini karena sebagian besar kunci utama akan menjadi kunci asing di tabel lain serta digunakan dalam beberapa indeks. Semakin kecil kunci Anda, semakin kecil indeksnya, semakin sedikit halaman dalam cache yang akan Anda gunakan.
- Kunci utama tidak boleh berubah. Memperbarui kunci utama harus selalu keluar dari pertanyaan. Ini karena kemungkinan besar akan digunakan dalam beberapa indeks dan digunakan sebagai kunci asing. Memperbarui satu kunci utama dapat menyebabkan efek riak perubahan.
- JANGAN gunakan "kunci utama masalah Anda" sebagai kunci utama model logika Anda. Misalnya nomor paspor, nomor jaminan sosial, atau nomor kontrak karyawan karena "kunci alami" ini dapat berubah dalam situasi dunia nyata. Pastikan untuk menambahkan batasan UNIK untuk ini jika perlu untuk menegakkan konsistensi.
Pada surrogate vs natural key, saya mengacu pada aturan di atas. Jika kunci alami kecil dan tidak akan pernah berubah dapat digunakan sebagai kunci utama. Jika kunci alami besar atau cenderung berubah, saya menggunakan kunci pengganti. Jika tidak ada kunci utama, saya masih membuat kunci pengganti karena pengalaman menunjukkan Anda akan selalu menambahkan tabel ke skema Anda dan berharap Anda akan meletakkan kunci utama di tempatnya.