La mia risposta è che non esiste una risposta chiara. Scegli un approccio all'interno del tuo progetto ed essere coerente. Entrambi hanno i loro vantaggi e svantaggi.
@cletus fa un buon punto sull'uso delle chiavi generate, ma quando si incontra una situazione in cui i dati sono relativamente statici, come i codici paese, l'introduzione di una chiave generata per loro sembra eccessivamente complessa. Nonostante la politica del mondo reale, l'apparizione e la scomparsa dei codici paese non costituirà un problema per la maggior parte dei problemi aziendali (ma se i tuoi dati riguardano attivamente tutti i 190-210 paesi, segui questo consiglio).
L'utilizzo di chiavi surrogate universalmente è una strategia buona e popolare. Ma ricorda, viene in risposta alla modellazione dei database utilizzando le chiavi naturali per tutto. Ack! Aprire un libro di database di 15 anni. Usare le chiavi naturali ovunque ti porta in situazioni difficili, poiché la comprensione iniziale dei domini del problema si rivela sbagliata. Vuoi avere coerenza nelle tue pratiche di modellazione, ma l'utilizzo di tecniche diverse per situazioni chiaramente diverse è OK.
Ho il sospetto che le prestazioni per la maggior parte dei database moderni sulle chiavi esterne var (2) siano uguali (o migliori) rispetto ai campi int. I database hanno supportato per anni chiavi esterne testuali.
Dato che non abbiamo altre informazioni sul progetto, se si preferisce utilizzare i codici paese come chiavi esterne e si ha la possibilità di farlo, direi che è OK. Sarà più facile lavorare con i dati. È un po 'controcorrente, ma ... in questo caso ... non ti porterà in un angolo.
L'Etiopia ha cambiato il suo nome?!? – SeanJA
Accidenti al telefono, mi ha fatto alzare nel mezzo digitando questa risposta esatta. Ben detto! – Eric
@SeanJA: secondo questo link, sì. Potrebbe essere stato un cambiamento temporaneo. – cletus