Я всегда предпочитал использовать длинные целые числа в качестве первичных ключей в базах данных для простоты и (предполагаемой) скорости. Но при использовании REST или Rails-подобной схемы URL для экземпляров объектов я бы в итоге получил URL-адреса, подобные этому:
http://example.com/user/783
И затем предполагается, что есть также пользователи с идентификаторами 782, 781, ..., 2 и 1. Предполагая, что рассматриваемое веб-приложение является достаточно безопасным, чтобы люди не могли вводить другие номера для просмотра других пользователей без авторизация, простой последовательно назначаемый суррогатный ключ, также «пропускает» общее количество экземпляров (старше этого), в данном случае пользователей, которые могут быть привилегированной информацией. (Например, я пользователь # 726 в stackoverflow.)
Будет ли UUID / GUID лучшим решением? Тогда я мог бы настроить URL-адреса так:
http://example.com/user/035a46e0-6550-11dd-ad8b-0800200c9a66
Не совсем краткий, но на экране отображается меньше скрытой информации о пользователях. Конечно, это похоже на «безопасность через мрак», которая не заменяет надлежащую безопасность, но кажется, по крайней мере, немного более безопасной.
Означает ли это преимущество стоимость и сложность реализации UUID для экземпляров объектов с веб-адресацией? Я думаю, что я все еще хотел бы использовать целочисленные столбцы в качестве PK базы данных просто для ускорения соединений.
Существует также вопрос представления UUID в базе данных. Я знаю, что MySQL хранит их как строки из 36 символов. Кажется, у Postgres более эффективное внутреннее представление (128 бит?), Но я сам не пробовал. У кого-нибудь есть опыт с этим?
Обновление: для тех, кто спрашивал об использовании только имени пользователя в URL (например, http://example.com/user/yukondude),, которое отлично работает для экземпляров объектов с уникальными именами, но как насчет миллиардов объектов веб-приложений, которые могут на самом деле быть идентифицированным только по количеству? Заказы, транзакции, счета-фактуры, дубликаты имен изображений, вопросы переполнения стека, ...