Исходя из опыта разработки приложений и хранилища данных, я бы порекомендовал иметь отдельный первичный ключ, который не используется ни в одной бизнес-среде и не использует идентификатор пользователя в качестве первичного ключа.Использование идентификатора пользователя в качестве первичного ключа может привести к целому ряду проблем.Я бы индексировал каждый столбец (отдельно).
В любое время, когда вам нужно объединить или переназначить пользователя или изменить его идентификатор и т. Д., Фактически использовав его ID пользователя в качестве первичного ключа, вы столкнетесь с множеством проблем для этих операций..
Кроме того, в Интернете это откроет людям, которые видят URL-адреса вроде ....user/1/details
, а затем потенциально могут изменить «1» на «2» (например) и увидеть информацию о других людях.Лучше, если идентификатор уникален, например «57489574389ghfjghfjghf», и тогда будет сложнее взломать URL-адреса.
Выбор между «естественным» и «суррогатным» ключом хорошо объяснен здесь:
http://www.agiledata.org/essays/keys.html
Большинство проблем, с которыми люди сталкиваются в этой области, относятся к крайним случаям, таким как слияния и удаления.Обычно они изначально имеют низкий приоритет, но со временем их беспокойство будет расти, а плохо спроектированные решения начнут выходить из строя (обычно потому, что в момент, когда качество данных «распознается»), часто бывает такой большой объем «плохих» данных, чтопродвижение вперед несостоятельно - старые данные не могут быть «исправлены», и без этого трудно ввести правила для новых записей, которые будут сосуществовать с ними. Это предполагает, что возможность обновления старых записей все еще требуется.