私は考える必要性が非常に強い言葉であり、厳密な意味では、テーブルはおそらくありません必要な代理キーを。
ただし、データベースの場合は、とにかくサロゲートキーを追加します。標準がどれほど安定しているかに関係なく、データベース設計を多数のサードパーティ(IATA、ISO)に依存させる必要は必ずしもありません。または、特定の標準にまったく依存したくない場合があります(他の通貨コード標準はありますか?知りません)。私はおそらく、次のような代理キーを使用してテーブルをモデリングします。
+-------------------------+ +------------------------+
|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 |
+-------------------------+
言い換えると、これらの業界標準コードがアプリケーションにとって本質的に重要でない限り、それらをテーブルのPKとして使用することはありません。それらは単なるラベルです。私の他のテーブルのほとんどはおそらくとにかく代理キーを持っているでしょう、そしてこのセットアップは私のデータモデルに一貫性を追加します。代理キーを「追加」するコストは最小限です。
いくつかのコメントに基づいて更新します。
サンプルテーブルのコンテキストを知らないと、データベースを使用するアプリケーションにとってIATA空港コードなどの重要性を知ることは不可能です。明らかに、アプリケーション全体でIATAコードが中心的に重要であり、広く使用されている場合、適切な分析の後、コードをテーブルのPKとして使用することが正しい決定になる可能性があります。
ただし、テーブルがアプリのいくつかのコーナーで使用される単なるルックアップテーブルである場合、IATAコードの相対的な重要性は、データベースインフラストラクチャ内のそのような顕著なスポットを正当化できない場合があります。確かに、あちこちのいくつかのクエリで追加の結合を作成する必要があるかもしれませんが、その努力は、IATAコードを作成することの意味を完全に理解するために研究を行うのにかかる労力と比べると些細なことかもしれません主キーフィールド。場合によっては、気にしないだけでなく、IATAコードを気にする必要はありません。以下の@James Snellのコメントは、テーブルのPKに影響することを心配する必要はないかもしれないものの完璧な例です。
また、設計の一貫性が重要です。すべてが一貫してサロゲートキーを設計した多数のテーブルを含むデータベースがあり、その後、サードパーティコードをPKとして使用しているルックアップテーブルがいくつかあると、矛盾が生じます。それは完全に悪いことではありませんが、ドキュメントには特別な注意が必要であり、保証されないかもしれません。これらは参照テーブルであり、一貫性のために代理キーを使用するだけで十分です。
さらなる調査に基づく更新:
OK
判明したように、IATAコードは、質問がそれらを明らかにするほど普遍的で信頼できるものではありません。このページによると:
ほとんどの国では、公式の航空刊行物でIATAコードではなく、4文字のICAOコードを使用しています。
さらに、IATAコードとICAOコードは、飛行場を識別するもう1つの方法であるFAA識別子コードとは異なります。
これらを提起する私のポイントは、どのコードがより優れているか、より普遍的であるか、より権威あるか、より包括的なかについて議論を始めることではありませんが、任意のサードパーティ識別子を中心にデータベース構造を設計することが私が選択するものではない理由を正確に示すことです、そうする特定のビジネス上の理由がない限り。
この場合、私は感じて、私のデータベースはプライマリキー候補としてIATAコード(またはいずれかのサードパーティ、潜在的に変更可能なコード)の前述および代理キーを使用することによって、より良い、より安定した構造化し、より柔軟なことでしょう。そうすることで、主キーの選択が原因で生じる可能性のある潜在的な落とし穴を避けることができます。