Używanie naturalnych kluczy do celów identyfikacyjnych jest dobrym pomysłem, gdy można zaufać naturalnym kluczom. Zobacz odpowiedź Marc_S w niektórych przypadkach, w których nie można zaufać kluczom naturalnym. Nie przejmuj się zbytnio wydajnością. Nawet coś takiego jak VIN (numer identyfikacyjny pojazdu) nie spowoduje zbyt dużego przeciągania bazy danych. Jeśli sądzisz, że to zrobisz, wykonaj kilka testów, zdając sobie sprawę, że wydajność nie skaluje się liniowo.
Głównym powodem zadeklarowania klucza głównego jest zapobieganie zsuwaniu się z pierwszej normalnej formy, a tym samym brak reprezentowania relacji. Użycie kluczu surogatycznego, który jest automatycznie odwracany, może skutkować dwoma wierszami z różnymi polami id, ale poza tym identyczne. Spowoduje to problemy związane z danymi, które nie występują w pierwszej normalnej formie. Użytkownicy nie będą w stanie Ci pomóc, ponieważ nie widzą pola identyfikatora.
Jeśli wiersze tabeli można określić za pomocą kombinacji dwóch lub więcej kluczy obcojęzycznych, masz do czynienia z tabelą powiązań, czasami nazywaną tabelą powiązań lub tabelą skrzyżowań. Zazwyczaj lepiej jest zadeklarować złożony klucz podstawowy, złożony ze wszystkich potrzebnych kluczy obcych.
Jeśli powyższe opcje spowodują powolną wydajność, czasami można temu zaradzić, tworząc dodatkowe indeksy. To zależy od tego, co robisz z danymi.
Zwijanie i łączenie krajów nie jest dobrym przykładem kluczowej zmiany per se; kiedy jednostka zostaje podzielona na wiele lub wiele jednostek zostaje połączonych - to będzie dość problem, niezależnie od tego, jak te jednostki są identyfikowane. Nadal +1 za bardzo dobre (czytaj: bardzo surowe) kryteria dla naturalnych kluczy. Osobiście uważam, że 2% jest jednak zawyżone. :) – Yarik