Хорошей практикой является сохранение ключа в виде целого числа, если только вам не нужны начальные нули.Вы хотите, чтобы ключ был наименьшего размера для быстрого объединения.
В большинстве баз данных есть способ автоматически устанавливать инкрементный ключ, и если он вам нужен, это, как правило, лучший способ сделать это, если вы не можете позволить себе пропустить какие-либо числа в последовательности из-за откатов.На самом деле существует всего несколько типов вещей, которые могут иметь требование leagl или regulartory, что вы не можете пропустить элементы в последовательности, поэтому автоматически сгенерированный идентификатор является одним из лучших вариантов, если вы хотите использовать суррогатный ключ.Не создавайте свой собственный инкрементный ключ, если в этом нет необходимости, поскольку вы не будете делать это так же эффективно, как база данных сделает автоматический ключ, и если вы ошибетесь, у вас могут быть условия гонки, и дочерние таблицы могут в конечном итоге быть назначены неверно.ID родителя.
Если у вас есть гарантированное уникальное значение (неизменяемое), вы можете использовать естественный ключ вместо суррогата.Это может замедлить некоторые соединения, но это также может означать, что вам не нужно делать столько объединений.Однако, если вы используете естественный ключ, убедитесь, что он действительно уникален и что он будет меняться очень редко.Такие вещи, как имя человека, название компании, адрес электронной почты и т. Д., Не являются хорошими кандидатами на противовесный ключ, автомобильный VIN-номер.Помните, что вы не хотите изменять десять миллионов дочерних записей, потому что название компании изменилось.