sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué deberíamos tener una columna ID en la tabla de usuarios?

Incluso si su nombre de usuario es único, hay pocas ventajas en tener una columna de identificación adicional en lugar de usar el varchar como su clave principal.

  • Algunas personas prefieren usar una columna de enteros como clave principal, para que sirva como una clave sustituta que nunca necesita cambiar, incluso si otras columnas están sujetas a cambios. Aunque no hay nada que impida que una clave principal natural también se pueda cambiar, tendría que usar restricciones de clave externa en cascada para asegurarse de que las claves externas en las tablas relacionadas se actualicen en sincronía con dicho cambio.

  • La clave principal, que es un número entero de 32 bits en lugar de un varchar, puede ahorrar espacio. La elección entre una columna de clave externa int o varchar en cualquier otra tabla que haga referencia a su tabla de usuario puede ser una buena razón.

  • Insertar en el índice de clave principal es un poco más eficiente si agrega nuevas filas al final del índice, en lugar de colocarlas en el medio del índice. Los índices en las tablas de MySQL suelen ser estructuras de datos B+Tree y puede estudiarlas para comprender cómo funcionan.

  • Algunos marcos de aplicación prefieren la convención de que cada tabla en su base de datos tiene una columna de clave principal llamada id , en lugar de utilizar claves naturales o claves compuestas. Seguir tales convenciones puede simplificar ciertas tareas de programación.

Ninguno de estos problemas es un factor decisivo. Y también hay ventajas en el uso de claves naturales:

  • Si busca filas por nombre de usuario con más frecuencia que por ID, puede ser mejor elegir el nombre de usuario como clave principal y aprovechar el almacenamiento organizado por índice de InnoDB. Haga que su columna de búsqueda principal sea la clave principal, si es posible, porque las búsquedas de clave principal son más eficientes en InnoDB (debe usar InnoDB en MySQL).

  • Como notó, si ya tiene una restricción única en el nombre de usuario, parece una pérdida de almacenamiento mantener una columna de identificación adicional que no necesita.

  • El uso de una clave natural significa que las claves externas contienen un valor legible por humanos, en lugar de una identificación de número entero arbitrario. Esto permite que las consultas utilicen el valor de la clave externa sin tener que volver a unirse a la tabla principal para obtener el valor "real".

El punto es que no hay una regla que cubra el 100% de los casos. A menudo recomiendo que mantenga sus opciones abiertas y use claves naturales, claves compuestas y claves sustitutas incluso en una sola base de datos.

Cubro algunos problemas de claves sustitutas en el capítulo "ID requerido" en mi libro Antipatrones SQL:Evitar las trampas de la programación de bases de datos .