Este tutorial proporciona los pasos completos para diseñar un esquema de base de datos del Sistema de gestión de empleados para administrar los usuarios, roles, permisos, organizaciones y empleados.
El Diagrama de Relación de Entidades o el diseño de la base de datos visual se muestra a continuación.

Base de datos de gestión de empleados
También puede visitar los populares tutoriales que incluyen Cómo instalar MySQL 8 en Ubuntu 20.04 LTS, Cómo instalar MySQL 8 en Windows, Cómo instalar MySQL Workbench en Ubuntu, Cómo instalar MySQL 8 con Workbench en Windows 10, Base de datos RBAC en MySql, Base de datos de blog en MySql, base de datos de cuestionarios en MySQL, base de datos de encuestas y sondeos en MySQL, base de datos de carrito de compras en línea en MySQL, base de datos de inventario en MySQL y aprenda consultas SQL básicas en MySQL.
Notas :También puede seguir el esquema de la base de datos personalizada del Sistema de gestión de empleados para obtener soluciones personalizadas según sus requisitos.
Base de datos de la organización
El primer paso es crear la base de datos de la organización. Se puede crear usando la consulta como se muestra a continuación.
CREATE SCHEMA `organization` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
He usado el conjunto de caracteres utf8mb4 para admitir una amplia gama de caracteres.
Mesa de funciones
En esta sección, diseñaremos la tabla de roles para almacenar los roles del sistema y de la organización. El tipo de columna se puede utilizar para identificar si el rol es para los usuarios de la aplicación o para los empleados de la organización. A continuación se menciona la descripción de todas las columnas de la tabla de funciones.
Id | La identificación única para identificar el rol. |
Título | El título del rol. |
Babosa | El slug único para buscar el rol. |
Descripción | La descripción para mencionar el rol. |
Tipo | El tipo de rol para distinguir entre roles de sistema y de organización. |
Activo | La bandera para verificar si el rol está actualmente activo. |
Creado en | Almacena la fecha y hora en que se crea el rol. |
Actualizado en | Almacena la fecha y hora en que se actualiza el rol. |
Contenido | Los detalles completos sobre el rol. |
La tabla de roles con las restricciones apropiadas se muestra a continuación.
CREATE TABLE `organization`.`role` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`description` TINYTEXT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`active` TINYINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC) );
Tabla de permisos
En esta sección, diseñaremos la Tabla de permisos para almacenar los permisos del sistema y de la organización. El tipo de columna se puede utilizar para identificar si el permiso es para los usuarios de la aplicación o para los empleados de la organización. A continuación se menciona la descripción de todas las columnas de la Tabla de permisos.
Id | La identificación única para identificar el permiso. |
Título | El título del permiso. |
Babosa | El slug único para buscar el permiso. |
Descripción | La descripción para mencionar el permiso. |
Tipo | El tipo de permiso para distinguir entre los permisos del sistema y de la organización. |
Activo | La bandera para verificar si el permiso está actualmente activo. |
Creado en | Almacena la fecha y hora en que se crea el permiso. |
Actualizado en | Almacena la fecha y hora en que se actualiza el permiso. |
Contenido | Los detalles completos sobre el permiso. |
La tabla de permisos con las restricciones apropiadas se muestra a continuación.
CREATE TABLE `organization`.`permission` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`description` TINYTEXT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`active` TINYINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC) );
Tabla de permisos de roles
La tabla de permisos de roles se puede utilizar para almacenar las asignaciones de los permisos a los roles. A continuación se menciona la descripción de todas las columnas de la Tabla de permisos de roles.
Id. de función | La identificación del rol para identificar el rol. |
Id. de permiso | La identificación del permiso para identificar el permiso. |
Creado en | Almacena la fecha y hora en que se crea el mapeo. |
Actualizado en | Almacena la fecha y hora en que se actualiza el mapeo. |
La tabla de permisos de roles con las restricciones apropiadas se muestra a continuación.
CREATE TABLE `organization`.`role_permission` (
`roleId` BIGINT NOT NULL,
`permissionId` BIGINT NOT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL,
PRIMARY KEY (`roleId`, `permissionId`),
INDEX `idx_rp_role` (`roleId` ASC),
INDEX `idx_rp_permission` (`permissionId` ASC),
CONSTRAINT `fk_rp_role`
FOREIGN KEY (`roleId`)
REFERENCES `organization`.`role` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_rp_permission`
FOREIGN KEY (`permissionId`)
REFERENCES `organization`.`permission` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Tabla de usuarios
En esta sección, diseñaremos la Tabla de usuarios para almacenar información del usuario. Los usuarios pueden administrar sus propios perfiles. Además, los usuarios pueden utilizar la aplicación de acuerdo con los roles del sistema que se les asignen. A continuación se menciona la descripción de todas las columnas de la tabla de usuarios.
Id | La identificación única para identificar al usuario. |
Id. de función | El rol del usuario. Puede ser Administrador o Usuario. |
Nombre | El nombre del usuario. |
Segundo Nombre | El segundo nombre del usuario. |
Apellido | El apellido del usuario. |
Móvil | El número de móvil del usuario. Se puede utilizar con fines de inicio de sesión y registro. |
Correo electrónico | El correo electrónico del usuario. Se puede utilizar con fines de inicio de sesión y registro. |
Hash de contraseña | El hash de contraseña generado por el algoritmo apropiado. Debemos evitar almacenar contraseñas simples o encriptadas. |
Registrado en | Esta columna se puede utilizar para calcular la vida del usuario con la aplicación. |
Último inicio de sesión | Se puede utilizar para identificar el último inicio de sesión del usuario. |
Introducción | La breve introducción del Usuario. |
Perfil | Detalles del usuario. |
La tabla de usuarios con las restricciones adecuadas se muestra a continuación.
CREATE TABLE `organization`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`roleId` BIGINT NOT NULL,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`username` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_username` (`username` ASC),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC),
INDEX `idx_user_role` (`roleId` ASC),
CONSTRAINT `fk_user_role`
FOREIGN KEY (`roleId`)
REFERENCES `organization`.`role` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Mesa de Organización
En esta sección diseñaremos la Mesa de Organización para almacenar los datos de la organización. A continuación se menciona la descripción de todas las columnas de la tabla de organización.
Id | La identificación única para identificar la organización. |
Creado por | La identificación de usuario para identificar al usuario que registró la organización. |
Actualizado por | El ID de usuario para identificar al usuario que actualizó la organización. |
Título | El título de la organización. |
Metatítulo | El metatítulo que se usará para el título del navegador y fines de SEO. |
Babosa | El slug para formar la URL única. |
Resumen | El resumen para mencionar los aspectos más destacados. |
Estado | El estado de la organización puede ser Nuevo, Aprobado, Activo o Bloqueado. |
Creado en | Almacena la fecha y hora en que se crea la organización. |
Actualizado en | Almacena la fecha y hora en que se actualiza la organización. |
Perfil | La columna utilizada para almacenar los detalles del perfil de la organización. |
Contenido | La columna utilizada para almacenar los detalles adicionales de la organización. |
Utiliza el estado de la columna para realizar un seguimiento del estado de la organización. El estado puede ser Nuevo, Aprobado, Activo o Bloqueado. La tabla de organización con las restricciones apropiadas se muestra a continuación.
CREATE TABLE `organization`.`organization` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_organization_creator` (`createdBy` ASC),
CONSTRAINT `fk_organization_creator`
FOREIGN KEY (`createdBy`)
REFERENCES `organization`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `organization`.`organization`
ADD INDEX `idx_organization_modifier` (`updatedBy` ASC);
ALTER TABLE `organization`.`organization`
ADD CONSTRAINT `fk_organization_modifier`
FOREIGN KEY (`updatedBy`)
REFERENCES `organization`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Metaorganización
La metatabla de la organización se puede utilizar para almacenar información adicional sobre las organizaciones, incluida la URL del banner de la organización, etc. A continuación se menciona la descripción de todas las columnas de la metatabla de la organización.
Id | La identificación única para identificar la organización meta. |
Id de la organización | La identificación de la organización para identificar la organización matriz. |
Clave | La clave que identifica el meta. |
Contenido | La columna utilizada para almacenar los metadatos de la organización. |
La metatabla de la organización con las restricciones adecuadas se muestra a continuación.
CREATE TABLE `organization`.`organization_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`organizationId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_organization` (`organizationId` ASC),
UNIQUE INDEX `uq_meta_organization` (`organizationId` ASC, `key` ASC),
CONSTRAINT `fk_meta_organization`
FOREIGN KEY (`organizationId`)
REFERENCES `organization`.`organization` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Tabla de empleados
En esta sección, diseñaremos la Tabla de empleados para almacenar los datos de los empleados. A continuación se menciona la descripción de todas las columnas de la tabla de empleados.
Id | La identificación única para identificar al empleado. |
ID de usuario | El ID de usuario para identificar al usuario asociado con el Empleado. |
Id. de función | La identificación del rol específico de la organización asignado al empleado. |
Creado por | La identificación de usuario para identificar al usuario que agregó al empleado. |
Actualizado por | La identificación de usuario para identificar al usuario que actualizó al empleado. |
Código | El código utilizado por la organización para identificar al empleado. |
Estado | El estado del empleado puede ser Nuevo, Aprobado, Activo, Bloqueado o Terminado. |
Creado en | Almacena la fecha y hora en que se crea el empleado. |
Actualizado en | Almacena la fecha y hora en que se actualiza el empleado. |
Empieza en | Almacena la fecha y hora de inicio del empleo. |
Termina en | Almacena la fecha y hora en que finaliza la relación laboral. |
Notas | La columna utilizada para almacenar las notas específicas del empleo. |
Utiliza el estado de la columna para realizar un seguimiento del estado del empleado. El estado puede ser Nuevo, Aprobado, Activo, Bloqueado o Terminado. La tabla de empleados con las restricciones adecuadas se muestra a continuación.
CREATE TABLE `organization`.`employee` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`organizationId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`roleId` BIGINT NOT NULL,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT NOT NULL,
`code` VARCHAR(100) NOT NULL,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`startsAt` DATETIME NULL DEFAULT NULL,
`endsAt` DATETIME NULL DEFAULT NULL,
`notes` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_employee_user` (`userId` ASC),
CONSTRAINT `fk_employee_user`
FOREIGN KEY (`userId`)
REFERENCES `organization`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `organization`.`employee`
ADD INDEX `idx_employee_organization` (`organizationId` ASC);
ALTER TABLE `organization`.`employee`
ADD CONSTRAINT `fk_employee_organization`
FOREIGN KEY (`organizationId`)
REFERENCES `organization`.`organization` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `organization`.`employee`
ADD INDEX `idx_employee_role` (`roleId` ASC);
ALTER TABLE `organization`.`employee`
ADD CONSTRAINT `fk_employee_role`
FOREIGN KEY (`roleId`)
REFERENCES `organization`.`role` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `organization`.`employee`
ADD INDEX `idx_employee_creator` (`createdBy` ASC);
ALTER TABLE `organization`.`employee`
ADD CONSTRAINT `fk_employee_creator`
FOREIGN KEY (`createdBy`)
REFERENCES `organization`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `organization`.`employee`
ADD INDEX `idx_employee_modifier` (`updatedBy` ASC);
ALTER TABLE `organization`.`employee`
ADD CONSTRAINT `fk_employee_modifier`
FOREIGN KEY (`updatedBy`)
REFERENCES `organization`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Resumen
En este tutorial, hemos discutido el diseño de la base de datos de un Sistema de gestión de empleados para almacenar roles, permisos, usuarios, organizaciones y administrar empleados de la organización.
Puede enviar sus comentarios para unirse a la discusión. También te puede interesar diseñar la base de datos de las aplicaciones Blog, Carrito de compras y Encuestas. El esquema completo de la base de datos también está disponible en GitHub.