Мой ответ таков: четкого ответа нет. Просто выберите подход в вашем проекте и будьте последовательны. У обоих есть свои плюсы и минусы.
@ cletus хорошо подходит для использования сгенерированных ключей, но когда вы сталкиваетесь с ситуацией, когда данные относительно статичны, например, коды стран, введение сгенерированного ключа для них кажется слишком сложным. Несмотря на политику реального мира, наличие и исчезновение кодов стран на самом деле не станет большой проблемой для большинства проблем бизнеса (но если ваши данные активно касаются всех 190-210 стран, следуйте этому совету).
Универсальное использование суррогатных ключей - хорошая и популярная стратегия. Но помните, это происходит в ответ на моделирование баз данных с использованием естественных ключей для всего. Ack! Откройте 15-летнюю книгу базы данных. Повсеместное использование естественных ключей определенно приводит вас к трудным ситуациям, поскольку первоначальное понимание проблемных областей оказывается неверным. Вы действительно хотите быть последовательными в своих методах моделирования, но использование различных методов для совершенно разных ситуаций - это нормально.
Я подозреваю, что производительность для большинства современных баз данных по внешним ключам var (2) будет такой же (или выше), что и у полей int. Базы данных годами поддерживают текстовые внешние ключи.
Учитывая, что у нас нет другой информации о проекте, если вы предпочитаете использовать коды стран в качестве внешних ключей, и у вас есть возможность сделать это, я бы сказал, что все в порядке. Будет проще работать с данными. Это немного против нынешних практик, но - в данном случае - это не оттолкнет вас в какой-то угол.