Не беспокойтесь о производительности, пока не получите простой и надежный дизайн, который согласуется с предметом, который описывают данные, и хорошо согласуется с предполагаемым использованием данных. Затем, если возникают проблемы с производительностью, вы можете устранить их, настроив систему.
В этом случае почти всегда лучше использовать строку в качестве естественного первичного ключа, при условии, что вы можете ей доверять. Не беспокойтесь, если это строка, если она достаточно короткая, скажем, максимум 25 символов. Вы не заплатите большую цену с точки зрения производительности.
Всегда ли люди, занимающиеся вводом данных, или автоматические источники данных предоставляют значение для предполагаемого естественного ключа или иногда не указываются? Это иногда неправильно во входных данных? Если да, то как ошибки обнаруживаются и исправляются?
Могут ли программисты и интерактивные пользователи, которые задают запросы, использовать естественный ключ, чтобы получить то, что они хотят?
Если вы не можете доверять естественному ключу, придумайте суррогат. Если вы изобрели суррогат, вы могли бы также изобрести целое число. Тогда вам нужно беспокоиться о том, чтобы скрыть суррогат от сообщества пользователей. Некоторые разработчики, которые не скрывали суррогатный ключ, пожалели об этом.