sql >> Base de Datos >  >> RDS >> Mysql

Guía para diseñar una base de datos para el sistema de gestión de empleados en MySQL

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.