21 RELACIÓN DE TABLAS - USUARIOS Y ROLES en el Sistema de Ventas con (PHPyMySql) FullStack

Duración: 17 min
Módulo: 👤 CRUD de Usuarios y Roles (Seguridad Lógica) Lección 13 de 17

Descripción

Lección 21: Relación de Tablas: Usuarios y Roles 🔗

Esta lección se centra en el diseño de la base de datos para establecer la relación entre la tabla de usuarios y la nueva tabla de roles, un paso esencial para implementar permisos y niveles de acceso en el sistema.

1. 🛠️ Creación de la Tabla roles

Para comenzar con la gestión de permisos, se crea la tabla dedicada a almacenar los roles del sistema:

ColumnaTipo de DatoDetalle
id_rolINT(11)Clave Primaria (Primary Key) y Autoincrementable.
nombre_rolVARCHAR(255)Almacena el nombre del rol (ej: Administrador, Operador).
fecha_hora_createDATETIMEFecha de creación del rol.
fecha_hora_updateDATETIMEFecha de actualización del rol [03:25].

2. 🔑 Configuración de Claves Foráneas

Para relacionar usuarios con roles, se implementa una relación de uno a muchos (un rol puede tener muchos usuarios):

a. Modificación de la Tabla usuarios

  1. Adición de id_rol: Se añade una nueva columna llamada id_rol a la tabla usuarios [06:34].
    • Importante: El tipo de dato (INT) y la longitud deben coincidir con la clave primaria de la tabla roles.
  2. Configuración de Índice: La nueva columna id_rol se configura como un índice (Foreign Key) para prepararla para la relación [07:22].

b. Creación del Enlace de Relación

Antes de crear la relación, si la tabla usuarios ya contenía datos, el video muestra que es necesario vaciar la tabla [09:49] para que la relación de clave foránea se establezca correctamente.

La relación se crea en el diseñador de phpMyAdmin:

  • Clave Referenciada (Principal): Se selecciona el campo id_rol de la tabla roles.
  • Clave Foránea (Relacional): Se selecciona el campo id_rol de la tabla usuarios [10:22].

c. Definición de Restricciones

Las restricciones definen el comportamiento de las tablas cuando se realizan cambios en la clave principal:

  • ON DELETE RESTRICT (Restringir Eliminación)
    • Propósito: Evita que se pueda eliminar un rol (ej: "Administrador") si existe al menos un usuario asignado a él [11:47]. Esto protege la integridad del sistema.
  • ON UPDATE CASCADE (Actualización en Cascada)
    • Propósito: Si se llega a cambiar el valor de la clave primaria de un rol (por ejemplo, si el id_rol cambia de 1 a 10), ese cambio se propaga y actualiza automáticamente a todos los usuarios que tienen asignado dicho rol [12:28].

3. 📝 Resultado y Consultas

Con la relación establecida, al insertar nuevos usuarios directamente en la base de datos, el campo id_rol se presenta como un menú desplegable que muestra los roles disponibles [13:54].

A partir de este punto, las consultas para obtener la información de un usuario (incluyendo su nombre de rol) ya no serán consultas simples, sino que utilizarán el comando INNER JOIN para enlazar y obtener datos de ambas tablas simultáneamente [16:29].