2009-12-01 10 views
16

Me lo contó un amigo:¿Es malo usar el nombre de usuario como clave principal en el diseño de la base de datos?

¿Qué llave única usas? Espero que no guarden el nombre de usuario completo --- ¡esto consumirá demasiado espacio de tabla! Asigne un ID de usuario único a cada (único) userNAME y guarde este ID de usuario (debe ser INTEGER UNSIGNED auto_increment o BIGINT UNSIGNED auto_increment). No se olvide de crear una referencia

EXTERIOR CLAVE (userID) REFERENCIAS usertable (userID) en todas las mesas utilizando el ID de usuario.

¿Es correcta la afirmación anterior? ¿Por qué o por qué no?

Respuesta

36

Creo que tiene razón (por el motivo equivocado) porque la clave principal no puede cambiar, pero username puede cambiar. Entonces debería usar userid porque no cambiaría.

+2

La clave principal no puede cambiar. O no es "primario". La clave debe ser asignada por el sistema, para garantizar que nunca pueda cambiar. Otros campos (como el nombre) pueden tener índices únicos, pero no pueden ser una clave principal, por definición. –

+0

La aplicación especifica algún campo como clave principal y, por lo tanto, no cambia. La aplicación puede cambiar posteriormente, lo que hace que un campo definido originalmente como único y no cambiante, permita duplicados o cambios, que es el punto aquí. –

+1

¿Es cierto también para unirse a la mesa? En otras palabras, ¿debería crear ID para cada entrada en la tabla de unión porque la combinación de claves principales puede cambiar? –

13

Tiene razón por los motivos equivocados. El espacio de tabla es secundario al hecho de que su aplicación podría exigir que los nombres de usuario puedan cambiarse o incluso dejar de ser únicos (podría visualizar una aplicación donde no se requieren nombres de usuario únicos, como Stack Overflow) y su aplicación necesitaría una refactorización importante y migración de datos en lugar de un cambio leve en el otro caso (PK entero).

Cuestiones relacionadas