Siempre he preferido usar números enteros largos como claves principales en las bases de datos, por simplicidad y velocidad (supuesta). Pero cuando utilizo un esquema de URL REST o similar a Rails para instancias de objetos, terminaría con URL como esta:
http://example.com/user/783
Y luego se supone que también hay usuarios con ID de 782, 781, ..., 2 y 1. Suponiendo que la aplicación web en cuestión es lo suficientemente segura como para evitar que las personas ingresen otros números para ver a otros usuarios sin autorización, un La clave sustituta asignada secuencialmente simple también "filtra" el número total de instancias (más antiguas que esta), en este caso usuarios, que pueden ser información privilegiada. (Por ejemplo, soy el usuario n. ° 726 en stackoverflow).
¿Un UUID / GUID sería una mejor solución? Entonces podría configurar URL como esta:
http://example.com/user/035a46e0-6550-11dd-ad8b-0800200c9a66
No es exactamente conciso, pero se muestra menos información implícita sobre los usuarios. Claro, huele a "seguridad a través de la oscuridad" que no sustituye a la seguridad adecuada, pero parece al menos un poco más segura.
¿Vale ese beneficio el costo y la complejidad de implementar UUID para instancias de objetos direccionables a través de la web? Creo que todavía querría usar columnas enteras como PK de base de datos solo para acelerar las uniones.
También está la cuestión de la representación en la base de datos de los UUID. Sé que MySQL los almacena como cadenas de 36 caracteres. Postgres parece tener una representación interna más eficiente (¿128 bits?) Pero no lo he probado yo mismo. Alguien tiene alguna experiencia con esto?
Actualización: para aquellos que preguntaron sobre el uso del nombre de usuario en la URL (por ejemplo, http://example.com/user/yukondude ), eso funciona bien para instancias de objetos con nombres que son únicos, pero ¿qué pasa con los miles de millones de sitios web? objetos de la aplicación que realmente solo se pueden identificar por número? Pedidos, transacciones, facturas, nombres de imágenes duplicados, preguntas de stackoverflow, ...