3 Modelos de base de datos para tabla de usuarios


La tabla de usuarios es uno de los pilares mas importantes en los sistemas en los que es requerido un modulo de usuarios, esta tabla de usuarios esta ligada al modulo de usuarios, a las acciones de registro, login y aquellas otras tablas relacionadas.

Cuando se habla de modelado de base de datos, normalmente se pienza en programas visuales como dia o mysql workbench, en mi caso prefiero trabajar con codigo SQL.

1. Modelo simple

Bueno el modelo mas simple para la tabla de usuarios seria la siguiente:

[code language=”sql”] create table user (
id int not null auto_increment primary key,
username varchar(255) not null unique,
password varchar(255)
);
[/code]

En el modelo simple tenemos una tabla llamada “user”, podria llamarse usuario, personas o lo que usteden gusten, es recomendable siempre usar nombres de tablas y campos que se relacionen con lo que vamos a almacenar a excepcion de casos especiales en los que se utilizan nombres indecifrables para proteger la base de datos.

En el modelo simple podemos ver 3 campos:

  • id: este es el identificador automatico incremental para diferenciar cada usuario, es requerido que este campo tambien sea la llave primaria de la tabla.
  • username: nombre del usuario, este es el nombre de acceso al usuario, en otros casos se podria usar el email, tambien es valido una palabra, etc, el nmbre de usuario debe ser unico, es decir no se debe repetir.
  • password: contrase~a, el password tambien es una palabra o texto, y sirve para proteger o autenticar el usuario, es recomendable que el password este encriptada.

Bueno, con este modelo super simple ya podemos hacer un registro, login, etc.

Registro

[code language=”sql”]

insert into user(username,password) value("evilnapsis",sha1(md5("mypassword")));

[/code]

Login

[code language=”sql”]

select * from user where username="evilnapsis" and password=sha1(md5("mypassword"));

[/code]

Se podria decir que el modelo simple de la tabla de usuario es funcional y valido, pero normalmente en la vida real la tabla de usuarios tendra muchos campos mas, pero la escencia del funcionamiento es la misma, es decir:

  • Para hacer el registro se pueden agregar mas campos como: nombre, apellidos, fecha de nacimiento, etc.
  • Para el login solo se necesitan 2 campos: el username y password, en algunos casos se puede sustituir el username por el email.

2. Modelo basico

Ahora veamos un modelo basico pero un poco mas completo que el modelo simple.

[code language=”sql”] create table user (
id int not null auto_increment primary key,
name varchar(255) not null,
lastname varchar(255) not null,
image varchar(255) not null,
email varchar(255) not null unique,
password varchar(255),
created_at datetime not null
);
[/code]

Podemos ver que este modelo cuenta con algunos campos extras, que nos sirven para tener mas informacion del usuario.

  • name: nombre, el nombre del usuario
  • lastname: almacena el o los apellidos del usuario
  • image: sirve para almacenar una imagen o foto.
  • email: sustituye el username, aunque tambien se puede usar username.
  • created_at: es un auxiliar para guardar y saber la fecha en la que se registra el usuario.

El modelo basico cumple con algunos requerimientos extra y en algunos casos puede ser suficiente.

3. Modelo Completo / Evilnapsis

Ahora veamos el modelo completo o modelo evilnapsis, no es que yo halla inventado este modelo, mas bien es el modelo que me parece mucho mas funcional y lo utilizo en proyectos privados y los proyectos de la tienda.

[code language=”sql”] create table user (
id int not null auto_increment primary key,
name varchar(255) not null,
lastname varchar(255) not null,
image varchar(255) not null,
email varchar(255) not null unique,
password varchar(255),
status int not null default 1,
kind int not null default 1,
created_at datetime not null
);
[/code]

El modelo completo a diferencia del modelo basico tiene 2 campos de diferencia:

  • status: sirve para almacenar y conocer un estado del usuario, algunos estados recomendados podrian ser: inactivo, activo, bloqueado, etc. para mayor facilidad se debe asociar estos estados a un numero entero y almacenar tal numero.
  • kind: tipo, este campo normalmente lo utilizo para diferenciar entre tipos de usuarios, por ejemplo: administrador, vendedor, medico, paciente, alumno, maestro, etc. de la misma manera que para el status, se debe relacionar cada tipo de usuario a un numero entero.

El modelo completo ayuda mas a crear un sistema mas variado, los status y kinds, hacen que la tabla usuario se adapte mas a ciertos cambios.

A veces yo utilizo los campos status y kind a otras tablas, o tambien los principios, si crees que tu sistema solo contara con 2 status y.o 2 kinds puedes usar valores booleanos en vez de valores enteros.

Conclusion

El modelo de usuarios a veces puede ser dificil, dependiendo de los requerimientos, pueden suceder casos simples y faciles como agregar campos de texto para datos del usuario como direccion, telefono, email secundario, tambien pueden haber casos en los que se requiera almacenar algun codigo de recuperacion o valores de configuracion para el usuario.

Espero con estos modelos y consejos de bases de datos les ayuden a crear sus propias tablas de usuarios de acuerdo a sus necesidades.


Leave a comment

5 thoughts on “3 Modelos de base de datos para tabla de usuarios

  • David Obezo

    Muy buen artículo Agustín. Creo personalmente que esta parte del control de usuarios y la seguridad es con la primera que se debe empezar para despues no andarnos regresando a construir estructuras de tablas que debieron quedar bien definidad desde un inicio.

  • Jesse

    Hola evilnapsis, que tal?, alguna vez haz intentado usar un login un registro en la aplicacion que lo autorice facebook o google o twitter?, o sea que el registro se haga con una redsocial?, estoy seguro que lo haz visto que lo usan algunas aplicaciones, como se haria algo asi?, siempre he tenido esa incognita.

    • Agustin Ramos Post author

      Hola jesse, ese tipo de login que dices se hace usando REST y permisos de acceso a otras aplicaciones, tal como lo hace Google, Facebook o Twitter, esta interesante ese tema, lo agregare a mi lista de temas futuros, saludos