Я завжди вважав за краще використовувати довгі цілі числа як первинні ключі в базах даних для простоти та (передбачуваної) швидкості. Але коли я використовую схему URL-адрес REST або Rails-подібну для екземплярів об’єктів, я в кінцевому підсумку отримую такі 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 для екземплярів веб-адресних об’єктів? Я думаю, що я все-таки хотів би використовувати цілі стовпці як ПК бази даних лише для пришвидшення приєднання.
Існує також питання про представлення UUID в базі даних. Я знаю, що MySQL зберігає їх як 36-символьні рядки. Здається, Postgres має більш ефективне внутрішнє представлення (128 біт?), Але я сам не пробував. У кого-небудь є досвід із цим?
Оновлення: для тих, хто запитував про просто використання імені користувача в URL-адресі (наприклад, http://example.com/user/yukondude ), це чудово працює для екземплярів об’єктів з унікальними іменами, але як щодо мільйонів веб-сторінок об’єкти додатків, які насправді можна ідентифікувати лише за номером? Замовлення, транзакції, рахунки-фактури, дублікати імен зображень, запитання щодо потоку даних, ...