Myślę, że potrzeba jest bardzo mocnym słowem iw ścisłym tego słowa znaczeniu tabele prawdopodobnie nie potrzebują kluczy zastępczych .
Gdyby jednak była to moja baza danych, prawdopodobnie i tak dodałbym klucze zastępcze. Niekoniecznie chcę, aby mój projekt bazy danych zależał od grupy stron trzecich (IATA, ISO), niezależnie od tego, jak stabilne są ich standardy. Lub może wcale nie chcę polegać na określonym standardzie (czy istnieją inne standardy kodów walut? Nie wiem). Prawdopodobnie modelowałbym swoje tabele za pomocą kluczy zastępczych w następujący sposób:
+-------------------------+ +------------------------+
|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 |
+-------------------------+
Innymi słowy, chyba że te standardowe kody branżowe są z natury ważne dla mojej aplikacji, nie użyłbym ich jako PK moich tabel. To tylko etykiety. Większość moich innych tabel prawdopodobnie będzie miała klucze zastępcze, a ta konfiguracja zwiększy spójność mojego modelu danych. Koszt „dodania” kluczy zastępczych jest minimalny.
Aktualizacja na podstawie niektórych komentarzy:
Bez znajomości kontekstu przykładowych tabel nie można wiedzieć, jak ważne są na przykład kody IATA Airport dla aplikacji korzystającej z bazy danych. Oczywiście, jeśli kody IATA są centralnie ważne i są szeroko stosowane w całej aplikacji, może być prawidłowa decyzja, po odpowiedniej analizie, użyć kodów jako PK tabeli.
Jeśli jednak tabela jest tylko tabelą wyszukiwania używaną w kilku rogach aplikacji, względne znaczenie kodów IATA może nie uzasadniać tak znaczącego miejsca w infrastrukturze bazy danych. Jasne, być może będziesz musiał wykonać dodatkowe sprzężenie w kilku zapytaniach tu i tam, ale wysiłek ten może być trywialny w porównaniu do wysiłku, jaki trzeba by wykonać, aby upewnić się, że w pełni rozumiesz konsekwencje wprowadzenia kodów IATA pole klucza podstawowego. W niektórych przypadkach nie tylko mnie to nie obchodzi, ale nie chcę dbać o kody IATA. Poniższy komentarz Jamesa Snella jest doskonałym przykładem czegoś, czego nie chciałbym się martwić o wpływ na PK moich stołów.
Ważna jest również konsekwencja w projektowaniu. Jeśli masz bazę danych z dziesiątkami tabel, z których wszystkie mają konsekwentnie zaprojektowane klucze zastępcze, a następnie kilka tabel odnośników, które używają kodów innych firm jako PK, co wprowadza niespójność. Nie jest to wcale takie złe, ale wymaga dodatkowej uwagi w dokumentacji i takie, które mogą nie być uzasadnione. Są to tabele odnośników dla dobra, po prostu użycie klucza zastępczego dla spójności jest całkowicie w porządku.
Aktualizacja na podstawie dalszych badań:
Ok, ugryzła mnie ciekawość i postanowiłem przeprowadzić dla zabawy badania kodów lotniska IATA, zaczynając od linków podanych w pytaniu.
Jak się okazuje, kody IATA nie są tak uniwersalne i autorytatywne, jak się wydaje na pytanie. Według tej strony :
Większość krajów korzysta z czteroznakowych kodów ICAO , a nie kodów IATA, w oficjalnych publikacjach lotniczych.
Ponadto kody IATA i kody ICAO różnią się od kodów identyfikacyjnych FAA , które są jeszcze innym sposobem identyfikacji lotnisk.
Moim celem przywołania tych informacji nie jest rozpoczęcie debaty na temat tego, które kody są lepsze, bardziej uniwersalne, bardziej autorytatywne lub bardziej wyczerpujące, ale aby dokładnie pokazać, dlaczego projektowanie struktury bazy danych wokół dowolnego identyfikatora innej firmy nie jest czymś, co wybrałbym , chyba że istniałby konkretny powód biznesowy .
W tym przypadku uważam, że moja baza danych byłaby lepiej zbudowana, bardziej stabilna i bardziej elastyczna, poprzez rezygnację z kodów IATA (lub dowolnego kodu potencjalnie zmiennego innej firmy) jako kandydata na klucz podstawowy i użycie klucza zastępczego. W ten sposób mogę pominąć wszelkie potencjalne pułapki, które mogą się pojawić z powodu wyboru klucza podstawowego.