2011-11-10 17 views
10

Estoy trabajando en un sitio web que permite a las personas crear perfiles en línea. Me preguntaba si es la opción correcta utilizar los ID de MySQL AUTO_INCREMENT ed como mis ID de usuario. ¿También teniendo en cuenta que podría tener que duplicar la base de datos en varios servidores un día?¿Es seguro el uso automático de mysql para usar como ID de usuario?

p. Ej. ¿usarías este método para usuarios en un sitio web como Twitter o Facebook?


He intentado generar userIds con PHP antes. Tenía algo como esto:

function generateID() { 
     $possible = "1234567890"; 
     $code = ""; 
     $characters = mt_rand(7,14); 
     $i = 0; 
     while ($i < $characters) { 
      $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1); 
      $i++; 
     } 
     return $code; 
} 

Esto dio el tipo de valores que necesitaba, pero siempre he tenido que comprobar si la base de datos de identificación que no existe todavía.

¿No hay un mejor enfoque?

Respuesta

14

¿Es seguro el uso automático de mysql como usuario?

Si su sistema de seguridad es confiable, básicamente, sí. Pero en general, los desarrolladores web se sienten incómodos al exponer identificaciones que permiten adivinar otros ID al aumentar o disminuir un número. Muchos recurren a identificaciones aleatorias de varios dígitos.

En una nota más oscura, las identificaciones numéricas también pueden permitir a los competidores estimar su crecimiento haciendo un seguimiento de cómo aumenta el valor incremental.

2

Dado que planea con anticipación y posiblemente estaría distribuyendo los datos entre las bases de datos, sería mejor que considere usar la función UUID() para obtener identificadores únicos. Esto hace que la fusión de datos sea mucho más fácil en el futuro.

+0

La clave primaria compuesta es una solución mucho mejor que UUID() para fusionar datos. –

+0

Existen dos escuelas de pensamiento al respecto: o bien se utilizan claves generadas artificialmente para identificar de forma única a alguien, o bien una clave primaria compuesta. Por ejemplo, Joe Celko defiende este último enfoque. – Andrew

+0

Gracias. Nunca he usado UUID() antes. De acuerdo con lo que vi en la mayoría de los ejemplos en Internet, crea ID largos, p. 1E8EF774581C102CBCFEF1AB81872213 ¿estoy en lo cierto? Si es así, ¿hay alguna forma de que pueda acortarlos? ¿O puede alguien referirme a un sitio web que explique mejor esta función (no creo que lo entiendo muy bien)? Gracias – Sthe

0

personalmente, sí, creo que sí, hasta cierto punto. Al duplicar una tabla de base de datos con un campo de incremento automático, I think el campo conserva su valor máximo (según cómo lo duplica, el escenario que tengo en mente es mysqldump con datos) así que cuando agrega una nueva fila , se le asignará la próxima identificación.

Sin embargo, si tuviera que ejecutar esto en varias bases de datos a la vez, y no se replicaron, necesitaría otra forma de generar identificaciones para evitar filas con la misma ID (aunque no puedo pensar en un escenario donde harías esto).

No podría decir si es la mejor práctica o no, pero ciertamente funciona.

4

No, no es una buena idea porque los identificadores de auto_increment no son fáciles de transportar. Para sus identificadores de usuario, usted desea tener copias de seguridad de las copias de seguridad, restaurarlas, moverlas entre las instancias de la base de datos, etc. sin tener que preocuparse por la colisión de los identificadores.

Sería mejor generar un número único o cadena alfanumérica utilizando algo así como UUID.

+0

Nada le impide crear una clave compuesta. No rechazaré, pero descartó usar auto_increment demasiado rápido. –

0

Sí Si elimina una fila, por ejemplo, con id 7, el siguiente valor de incremento automático será 8 y no 7 nuevamente. Entonces todos los valores definitivamente serán únicos. y deberá truncar la tabla para iniciar el incremento automático nuevamente. POR LO TANTO, siempre puede usar campos de incremento automático para IDS de usuario.

Cuestiones relacionadas