Мне было интересно, каковы лучшие практики для создания и хранения идентификаторов. Несколько лет назад профессор рассказал мне об опасностях плохо построенной системы идентификации на примере номера социального страхования. В частности, из-за того, что в SSN нет обнаружения ошибок... невозможно отличить 9-значную строку от действительного SSN. И теперь государственным органам нужны такие вещи, как Фамилия + SSN или День рождения + SSN, чтобы отслеживать ваши данные и обеспечивать их проверку. Кроме того, ваш номер социального страхования несколько предсказуем в зависимости от того, где вы родились.
Теперь я создаю базу данных пользователей... и, основываясь на этом совете, "userid mediumint auto_increment" был бы неприемлем. Особенно, если я планирую использовать этот идентификатор в качестве основного идентификатора для пользователя. (например, если я разрешаю пользователям изменять свое имя пользователя, то отследить имя пользователя будет труднее, чем числовой идентификатор пользователя... требующий каскадных внешних ключей и многого другого.) Электронные письма меняются, имена пользователей могут меняться, пароли меняются.. ., но идентификатор пользователя должен оставаться постоянным навсегда.
Понятно, что auto_increment предназначен только для surrogate_keys. То есть это полезный ярлык только тогда, когда у вас уже есть первичный механизм идентификации, но его не следует использовать в качестве «врожденного идентификатора» для данных. Создание случайного UUID выглядит интересно, но случайность меня отталкивает.
И поэтому я спрашиваю: каковы наилучшие методы создания идентификационного номера «первичного ключа»?