Ini bukan praktik yang baik untuk desain berlebihan. Yaitu - itu bukan praktik yang baik untuk selalu memiliki kunci primer int auto increment ketika seseorang tidak diperlukan.
Mari kita lihat contoh di mana seseorang tidak diperlukan.
Anda memiliki tabel untuk artikel - ini memiliki kunci primer int id
, dan kolom varchar bernama title
.
Anda juga memiliki tabel yang penuh dengan kategori id
artikel– int primary key, varchar name
.
Satu baris dalam tabel Artikel memiliki id
5, dan title
"Cara memasak angsa dengan mentega". Anda ingin menautkan artikel itu dengan baris berikut di tabel Kategori Anda: "Fowl" ( id : 20), "Goose" ( id : 12), "Cooking" ( id : 2), "Butter" (id: 9) .
Sekarang, Anda memiliki 2 tabel: artikel dan kategori. Bagaimana Anda menciptakan hubungan di antara keduanya?
Anda bisa memiliki tabel dengan 3 kolom: id (kunci utama), article_id (kunci asing), category_id (kunci asing). Tetapi sekarang Anda memiliki sesuatu seperti:
| id | a_id | c_id |
| 1 | 5 | 20 |
| 2 | 5 | 12 |
| 3 | 5 | 2 |
Solusi yang lebih baik adalah memiliki kunci utama yang terdiri dari 2 kolom.
| a_id | c_id |
| 5 | 20 |
| 5 | 12 |
| 5 | 2 |
Ini dapat dicapai dengan melakukan:
create table articles_categories (
article_id bigint,
category_id bigint,
primary key (article_id, category_id)
) engine=InnoDB;
Alasan lain untuk tidak menggunakan integer kenaikan otomatis adalah jika Anda menggunakan UUID untuk kunci utama Anda.
UUID menurut definisi mereka unik, yang melakukan hal yang sama dengan menggunakan integer unik. Mereka juga memiliki manfaat tambahan (dan kontra) mereka sendiri di atas bilangan bulat. Misalnya, dengan UUID, Anda tahu bahwa string unik yang Anda maksudkan menunjuk ke catatan data tertentu; ini berguna dalam kasus di mana Anda tidak memiliki 1 basis data pusat, atau di mana aplikasi memiliki kemampuan untuk membuat catatan data offline (kemudian unggah ke database di kemudian hari).
Pada akhirnya, Anda tidak perlu memikirkan kunci primer sebagai suatu hal. Anda perlu menganggap mereka sebagai fungsi yang mereka lakukan. Mengapa Anda memerlukan kunci utama? Untuk dapat mengidentifikasi secara unik set data tertentu dari tabel menggunakan bidang yang tidak akan diubah di masa mendatang. Apakah Anda memerlukan kolom tertentu yang dipanggil id
untuk melakukan ini, atau dapatkah Anda mendasarkan identifikasi unik ini dari data lain (tidak dapat diubah)?