Saya pikir perlu adalah kata yang sangat kuat, dan dalam arti yang ketat, tabel mungkin tidak perlu kunci pengganti .
Namun, jika itu adalah basis data saya, saya mungkin akan menambahkan kunci pengganti. Saya mungkin tidak ingin desain database saya bergantung pada sekelompok pihak ketiga (IATA, ISO), terlepas dari seberapa stabil standar mereka. Atau, saya mungkin tidak ingin bergantung pada standar tertentu sama sekali (adakah standar kode mata uang lainnya? Saya tidak tahu). Saya mungkin akan memodelkan meja saya dengan kunci pengganti seperti:
+-------------------------+ +------------------------+
|Airport | |Country |
|-------------------------| |------------------------|
|airport_id int (PK)| |country_id int (PK) |
|iata_airport_code string | |iso_country_code string |
|icao_airport_code string | +------------------------+
|faa_identifier string |
|address string |
|name string |
+-------------------------+
+-------------------------+
|Currency |
|-------------------------|
|currency_id int (PK) |
|iso_currency_code string |
|name string |
+-------------------------+
Dengan kata lain, kecuali kode standar industri itu secara inheren penting untuk aplikasi saya, saya tidak akan menggunakannya sebagai PK dari tabel saya. Itu hanya label. Sebagian besar tabel saya yang lain mungkin akan memiliki kunci pengganti, dan pengaturan ini akan menambah konsistensi pada model data saya. Biaya 'menambahkan' kunci pengganti minimal.
Pembaruan berdasarkan pada beberapa komentar:
Tanpa mengetahui konteks dari tabel contoh, tidak mungkin untuk mengetahui seberapa penting hal-hal seperti IATA Airport Codes bagi aplikasi menggunakan database. Jelas, jika kode IATA sangat penting bagi pusat dan digunakan secara luas di seluruh aplikasi, mungkin merupakan keputusan yang tepat, setelah analisis yang tepat, untuk menggunakan kode sebagai PK tabel.
Namun, jika tabel tersebut hanyalah tabel pencarian yang digunakan di beberapa sudut aplikasi, kepentingan relatif dari kode IATA mungkin tidak membenarkan tempat yang menonjol dalam infrastruktur database. Tentu, Anda mungkin harus membuat tambahan bergabung dalam beberapa pertanyaan di sana-sini, tetapi upaya itu mungkin sepele dibandingkan dengan upaya yang diperlukan untuk melakukan penelitian untuk memastikan bahwa Anda sepenuhnya memahami implikasi membuat kode IATA sebagai bidang kunci utama. Dalam beberapa kasus, saya tidak hanya tidak peduli, tetapi saya tidak mau harus peduli dengan kode IATA. @James Snell berkomentar di bawah ini adalah contoh sempurna dari sesuatu yang saya mungkin tidak ingin khawatir tentang mempengaruhi PK dari tabel saya.
Selain itu, konsistensi dalam desain juga penting. Jika Anda memiliki database dengan lusinan tabel yang semuanya telah secara konsisten merancang kunci pengganti, dan kemudian beberapa tabel pencarian yang menggunakan kode pihak ketiga sebagai PK, yang memperkenalkan inkonsistensi. Itu sama sekali tidak buruk, tetapi membutuhkan perhatian ekstra dalam dokumentasi dan semacamnya yang mungkin tidak diperlukan. Mereka mencari tabel demi kebaikan, hanya menggunakan kunci pengganti untuk konsistensi baik-baik saja.
Pembaruan berdasarkan penelitian lebih lanjut:
Ok, rasa ingin tahu menggigit saya dan saya memutuskan untuk melakukan penelitian pada kode bandara IATA untuk bersenang-senang, dimulai dengan tautan yang disediakan dalam pertanyaan.
Ternyata, kode IATA tidak seuniversal dan otoritatif seperti yang ditanyakan oleh mereka. Menurut halaman ini :
Sebagian besar negara menggunakan kode ICAO empat karakter , bukan kode IATA, dalam publikasi aeronautika resmi mereka.
Selain itu, kode IATA dan kode ICAO berbeda dari kode Pengidentifikasi FAA , yang merupakan cara lain untuk mengidentifikasi lapangan udara.
Maksud saya dalam mengemukakan ini bukanlah untuk memulai perdebatan tentang kode mana yang lebih baik atau lebih universal atau lebih otoritatif atau lebih komprehensif, tetapi untuk menunjukkan dengan tepat mengapa mendesain struktur basis data Anda di sekitar pengidentifikasi pihak ke-3 yang sewenang-wenang bukanlah sesuatu yang akan saya pilih untuk dilakukan , kecuali ada alasan bisnis khusus untuk melakukannya .
Dalam hal ini, saya merasa database saya akan lebih terstruktur, lebih stabil, dan lebih fleksibel, dengan melepaskan kode IATA (atau pihak ke-3, kode yang berpotensi berubah) sebagai kandidat kunci utama dan menggunakan kunci pengganti. Dengan melakukan itu, saya dapat melupakan setiap jebakan potensial yang mungkin muncul karena pemilihan kunci utama.