¿Qué campo elegir para la clave primaria?

publicado por: Anonymous

A la hora de declarar la clave primaria (PK) de una tabla (p.e. USUARIO), hay varias opciones:

  • Se puede colocar un campo existente (username) como clave primaria (clave natural), así el nombre de usuario será validado para que no haya ningún otro igual. Por ejemplo:

    CREATE TABLE usuarios(
      username VARCHAR(30) not null;
      password VARCHAR(30) not null;
      tipo_u   VARCHAR(10) null;
    
      PRIMARY KEY(username)
    ) ENGINE INNODB
    
  • Se puede añadir un nuevo campo (iduser) como clave primaria (clave subrogada), tal vez auto incremental si se desea. Por ejemplo:

    CREATE TABLE usuarios(
      iduser   INT not null AUTO_INCREMENT;
      username VARCHAR(30) not null;
      password VARCHAR(30) not null;
      tipo_u   VARCHAR(10) null;
    
      PRIMARY KEY(iduser)
    ) ENGINE INNODB
    

¿Es alguna de las dos más recomendable? ¿Cuál de las dos maneras permite un mejor funcionamiento en una base de datos? ¿Qué ventajas trae cada método?

¿Es más seguro usando el iduser? Yo en realidad no le veo mucha utilidad pero si he visto que muchos sitios lo usan así.

solución

1) El username no puede ser auto incremental, teniendo en cuenta que es un varchar y que el username sera introducido a través del formulario.

2) El username puedes ponerlo como PRIMARY KEY o como UNIQUE

CREATE TABLE usuarios(
    usuario1 varchar(30) PRIMARY KEY,
    usuario2 varchar(30) UNIQUE
    );

La ventaja de utilizar un id de tipo int se ve a la hora de crear relaciones con otras tablas. Además te facilita la búsqueda de multiples usuarios.

Por Ejemplo:

SELECT * FROM usuarios WHERE id BETWEEN 100 AND 500;

Algo que no puedes hacer con usuario varchar(30).

Lo recomendado es utilizar ambos. PRIMARY KEY para el iduser y UNIQUE para username

CREATE TABLE usuarios(
iduser   INT not null AUTO_INCREMENT;
username VARCHAR(30) not null UNIQUE;
password VARCHAR(30) not null;
tipo_u   VARCHAR(10) null;

PRIMARY KEY(iduser)
)ENGINE INNODB

Fijate que username esta como UNIQUE Esto impide que se repita el nombre de usuario. La ventaja de UNIQUE es que puedes tener varios campos UNIQUE en la misma tabla a diferencia de PRIMARY KEY.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *