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

Guía para diseñar la base de datos para el administrador de tareas en MySQL

Este tutorial proporciona los pasos completos para diseñar un esquema de base de datos del Administrador de tareas para administrar las tareas, actividades y comentarios de los usuarios de la aplicación. La aplicación Administrador de tareas creada con este diseño de base de datos se puede utilizar para almacenar las tareas asociadas con los usuarios. La misma aplicación se puede utilizar para gestionar las actividades de la tarea y los comentarios o notas.

El Diagrama de Relación de Entidades o el diseño de la base de datos visual se muestra a continuación.

Diseño de base de datos de gestión de tareas

También puede visitar los tutoriales populares 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 notificaciones en MySQL, base de datos de eventos de calendario y recordatorios en MySQL, base de datos de blogs 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.

Base de datos del administrador de tareas

El primer paso es crear la base de datos del Administrador de tareas. Se puede crear usando la consulta como se muestra a continuación.

CREATE SCHEMA `task_manager` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

He usado el conjunto de caracteres utf8mb4 para admitir una amplia gama de caracteres.

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 para gestionar sus propias tareas y actividades. 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 Una breve introducción del Usuario.
Perfil Detalles del usuario.

La tabla de usuarios con las restricciones adecuadas se muestra a continuación.

CREATE TABLE `task_manager`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`roleId` SMALLINT 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) );

Tabla de tareas

En esta sección, diseñaremos la Tabla de tareas para almacenar las tareas. A continuación se menciona la descripción de todas las columnas de la tabla de tareas.

Id La identificación única para identificar la tarea.
ID de usuario El ID de usuario para identificar al usuario correspondiente.
Creado por La identificación de usuario para identificar al usuario que agregó la tarea.
Actualizado por El ID de usuario para identificar al usuario que actualizó la tarea.
Título El título de la Tarea.
Descripción La descripción de la Tarea.
Estado El estado de la tarea puede ser Nuevo, En progreso o Completado.
Horas El total de horas consumidas por la Tarea. Puede completarse manualmente o actualizarse al finalizar la actividad.
Creado en Almacena la fecha y hora en que se crea la tarea.
Actualizado en Almacena la fecha y hora en que se actualiza la tarea.
Fecha de inicio planificada Almacena la fecha y hora en la que se prevé iniciar la tarea.
Fecha de finalización planificada Almacena la fecha y hora en la que se prevé finalizar la tarea.
Fecha de inicio real Almacena la fecha y hora real en que se inició la tarea.
Fecha de finalización real Almacena la fecha y hora real en que finalizó la tarea.
Contenido La columna utilizada para almacenar los detalles de la tarea.

Utiliza el estado de la columna para realizar un seguimiento del estado de la tarea. El estado puede ser Nuevo, En curso o Completado. Además, el usuario puede completar manualmente las horas en caso de que no se planifique ninguna actividad para la tarea. La tarea también puede derivar sus horas reales de las actividades asociadas con ella. La tabla de tareas con las restricciones apropiadas se muestra a continuación.

CREATE TABLE `task_manager`.`task` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT NOT NULL,
`title` VARCHAR(512) NOT NULL,
`description` VARCHAR(2048) DEFAULT NULL,
`status` SMALLINT NOT NULL DEFAULT 0,
`hours` FLOAT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`plannedStartDate` DATETIME NULL DEFAULT NULL,
`plannedEndDate` DATETIME NULL DEFAULT NULL,
`actualStartDate` DATETIME NULL DEFAULT NULL,
`actualEndDate` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_task_user` (`userId` ASC),
CONSTRAINT `fk_task_user`
FOREIGN KEY (`userId`)
REFERENCES `task_manager`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `task_manager`.`task`
ADD INDEX `idx_task_creator` (`createdBy` ASC);
ALTER TABLE `task_manager`.`task`
ADD CONSTRAINT `fk_task_creator`
FOREIGN KEY (`createdBy`)
REFERENCES `task_manager`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `task_manager`.`task`
ADD INDEX `idx_task_modifier` (`updatedBy` ASC);
ALTER TABLE `task_manager`.`task`
ADD CONSTRAINT `fk_task_modifier`
FOREIGN KEY (`updatedBy`)
REFERENCES `task_manager`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Meta tarea

La metatabla de tareas se puede utilizar para almacenar información adicional sobre las tareas. A continuación se menciona la descripción de todas las columnas de la metatabla de tareas.

Id La identificación única para identificar la tarea meta.
Id. de tarea La identificación de la tarea para identificar la tarea principal.
Clave La clave que identifica el meta.
Contenido La columna utilizada para almacenar los metadatos de la tarea.

La metatabla de tareas con las restricciones apropiadas se muestra a continuación.

CREATE TABLE `task_manager`.`task_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`taskId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_task` (`taskId` ASC),
UNIQUE INDEX `uq_task_meta` (`taskId` ASC, `key` ASC),
CONSTRAINT `fk_meta_task`
FOREIGN KEY (`taskId`)
REFERENCES `task_manager`.`task` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Tabla de etiquetas y tabla de etiquetas de tareas

En esta sección, diseñaremos la tabla de etiquetas y Tabla de etiquetas de tareas para almacenar las etiquetas de tareas y sus asignaciones. A continuación se menciona la descripción de todas las columnas de la tabla de etiquetas.

Id La identificación única para identificar la etiqueta.
Título El título de la etiqueta.
Babosa El slug de la etiqueta para formar la URL.

La tabla de etiquetas con las restricciones adecuadas se muestra a continuación.

CREATE TABLE `task_manager`.`tag` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`));

A continuación se menciona la descripción de todas las columnas de la tabla de etiquetas de tareas.

Id. de tarea La identificación de la tarea para identificar la tarea.
Id. de etiqueta La identificación de la etiqueta para identificar la etiqueta.

La tabla de etiquetas de tareas con las restricciones adecuadas se muestra a continuación.

CREATE TABLE `task_manager`.`task_tag` (
`taskId` BIGINT NOT NULL,
`tagId` BIGINT NOT NULL,
PRIMARY KEY (`taskId`, `tagId`),
INDEX `idx_tt_task` (`taskId` ASC),
INDEX `idx_tt_tag` (`tagId` ASC),
CONSTRAINT `fk_tt_task`
FOREIGN KEY (`taskId`)
REFERENCES `task_manager`.`task` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_tt_tag`
FOREIGN KEY (`tagId`)
REFERENCES `task_manager`.`tag` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Tabla de actividades

En esta sección diseñaremos la Tabla de actividades para almacenar las actividades de la tarea requeridas para completar la tarea. A continuación se menciona la descripción de todas las columnas de la Tabla de actividades.

Id La identificación única para identificar la actividad.
ID de usuario El ID de usuario para identificar al usuario correspondiente.
Id. de tarea La identificación de la tarea para identificar la tarea correspondiente.
Creado por La identificación de usuario para identificar al usuario que agregó la tarea.
Actualizado por El ID de usuario para identificar al usuario que actualizó la tarea.
Título El título de la Tarea.
Descripción La descripción de la Tarea.
Estado El estado de la actividad puede ser Nuevo, En progreso o Completado.
Horas El total de horas consumidas por la actividad. Las horas de la tarea correspondiente se pueden actualizar al finalizar la actividad.
Creado en Almacena la fecha y hora en que se crea la actividad.
Actualizado en Almacena la fecha y hora en que se actualiza la actividad.
Fecha de inicio planificada Almacena la fecha y hora en la que está previsto el inicio de la actividad.
Fecha de finalización planificada Almacena la fecha y hora en que se prevé finalizar la actividad.
Fecha de inicio real Almacena la fecha y hora real de inicio de la actividad.
Fecha de finalización real Almacena la fecha y hora real en que finalizó la actividad.
Contenido La columna utilizada para almacenar los detalles de la actividad.

Utiliza el estado de la columna para realizar un seguimiento del estado de la actividad. El estado puede ser Nuevo, En curso o Completado. Además, el usuario puede completar manualmente las horas de actividad. La tarea puede derivar sus horas reales de las actividades asociadas con ella. La tabla de actividades con las restricciones apropiadas se muestra a continuación.

CREATE TABLE `task_manager`.`activity` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`taskId` BIGINT NOT NULL,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT NOT NULL,
`title` VARCHAR(512) NOT NULL,
`description` VARCHAR(2048) DEFAULT NULL,
`status` SMALLINT NOT NULL DEFAULT 0,
`hours` FLOAT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`plannedStartDate` DATETIME NULL DEFAULT NULL,
`plannedEndDate` DATETIME NULL DEFAULT NULL,
`actualStartDate` DATETIME NULL DEFAULT NULL,
`actualEndDate` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_activity_user` (`userId` ASC),
CONSTRAINT `fk_activity_user`
FOREIGN KEY (`userId`)
REFERENCES `task_manager`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `task_manager`.`activity`
ADD INDEX `idx_activity_task` (`taskId` ASC);
ALTER TABLE `task_manager`.`activity`
ADD CONSTRAINT `fk_activity_task`
FOREIGN KEY (`taskId`)
REFERENCES `task_manager`.`task` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `task_manager`.`activity`
ADD INDEX `idx_activity_creator` (`createdBy` ASC);
ALTER TABLE `task_manager`.`activity`
ADD CONSTRAINT `fk_activity_creator`
FOREIGN KEY (`createdBy`)
REFERENCES `task_manager`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `task_manager`.`activity`
ADD INDEX `idx_activity_modifier` (`updatedBy` ASC);
ALTER TABLE `task_manager`.`activity`
ADD CONSTRAINT `fk_activity_modifier`
FOREIGN KEY (`updatedBy`)
REFERENCES `task_manager`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Tabla de comentarios

En esta sección, diseñaremos la Tabla de comentarios para almacenar los comentarios de tareas y actividades. A continuación se menciona la descripción de todas las columnas de la Tabla de comentarios.

Id La identificación única para identificar la revisión del producto.
Id. de tarea La identificación de la tarea para identificar la tarea principal.
Id. de actividad La identificación de la actividad para identificar la actividad principal.
Título El título de la reseña.
Creado en Almacena la fecha y hora en que se crea el comentario.
Actualizado en Almacena la fecha y hora en que se actualiza el comentario.
Contenido La columna utilizada para almacenar los detalles del comentario.

La tabla de comentarios con las restricciones adecuadas se muestra a continuación.

CREATE TABLE `task_manager`.`comment` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`taskId` BIGINT NOT NULL,
`activityId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(100) NOT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_comment_task` (`taskId` ASC),
CONSTRAINT `fk_comment_task`
FOREIGN KEY (`taskId`)
REFERENCES `task_manager`.`task` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `task_manager`.`comment`
ADD INDEX `idx_comment_activity` (`activityId` ASC);
ALTER TABLE `task_manager`.`comment`
ADD CONSTRAINT `fk_comment_activity`
FOREIGN KEY (`activityId`)
REFERENCES `task_manager`.`activity` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Resumen

En este tutorial, hemos discutido el diseño de la base de datos de una aplicación de administración de tareas para administrar las tareas y actividades de los usuarios de la aplicación. También proporcionó el diseño de la base de datos para gestionar los comentarios de las tareas y actividades.

Puede enviar sus comentarios para unirse a la discusión. También te puede interesar diseñar la base de datos de Notificaciones, Calendario de Eventos y Recordatorio. El esquema completo de la base de datos también está disponible en GitHub.