Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Guia para projetar banco de dados para o gerenciador de tarefas no MySQL


Este tutorial fornece as etapas completas para projetar um esquema de banco de dados do Gerenciador de Tarefas para gerenciar as tarefas, atividades e comentários dos usuários do aplicativo. O aplicativo Gerenciador de Tarefas criado usando esse design de banco de dados pode ser usado para armazenar as tarefas associadas aos usuários. O mesmo aplicativo pode ser usado para gerenciar as atividades da tarefa e comentários ou notas.



O diagrama de relacionamento de entidade ou design de banco de dados visual é mostrado abaixo.



Projeto de banco de dados de gerenciamento de tarefas



Você também pode visitar os tutoriais populares, incluindo como instalar o MySQL 8 no Ubuntu 20.04 LTS, como instalar o MySQL 8 no Windows, como instalar o MySQL Workbench no Ubuntu, como instalar o MySQL 8 com o Workbench no Windows 10, banco de dados RBAC no MySql, Banco de dados de notificações em MySQL, banco de dados de eventos de calendário e lembretes em MySQL, banco de dados de blogs em MySQL, banco de dados de questionários em MySQL, banco de dados de pesquisa e pesquisa em MySQL, banco de dados de carrinho de compras on-line em MySQL, banco de dados de inventário em MySQL e aprender consultas básicas de SQL em MySQL.


Banco de dados do Gerenciador de Tarefas




O primeiro passo é criar o Banco de Dados do Gerenciador de Tarefas. Ele pode ser criado usando a consulta conforme mostrado abaixo.


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



Eu usei o conjunto de caracteres utf8mb4 para suportar uma ampla gama de caracteres.


Tabela de usuário




Nesta seção, projetaremos a Tabela do usuário para armazenar informações do usuário. Os usuários podem gerenciar seus próprios perfis. Além disso, os usuários podem usar o aplicativo para gerenciar suas próprias tarefas e atividades. Abaixo está a descrição de todas as colunas da Tabela de Usuários.


ID O ID exclusivo para identificar o usuário.
ID da função A função do usuário. Pode ser Administrador ou Usuário.
Nome O primeiro nome do usuário.
Nome do meio O nome do meio do usuário.
Sobrenome O sobrenome do usuário.
Celular O número de celular do usuário. Ele pode ser usado para fins de login e registro.
E-mail O e-mail do usuário. Ele pode ser usado para fins de login e registro.
Hash de senha O hash de senha gerado pelo algoritmo apropriado. Devemos evitar armazenar senhas simples ou criptografadas.
Registrado em Esta coluna pode ser usada para calcular a vida útil do usuário com o aplicativo.
Último login Pode ser usado para identificar o último login do usuário.
Introdução Uma breve introdução do usuário.
Perfil Detalhes do usuário.



A Tabela de Usuários com as restrições apropriadas é mostrada abaixo.


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) );


Tabela de tarefas




Nesta seção, projetaremos a Tabela de tarefas para armazenar as tarefas. Abaixo mencionada é a descrição de todas as colunas da Tabela de Tarefas.


ID O ID exclusivo para identificar a tarefa.
ID de usuário O ID do usuário para identificar o usuário correspondente.
Criado por O ID do usuário para identificar o usuário que adicionou a tarefa.
Atualizado por O ID do usuário para identificar o usuário que atualizou a tarefa.
Título O título da tarefa.
Descrição A descrição da tarefa.
Estado O status da tarefa pode ser Novo, Em andamento ou Concluído.
Horas O total de horas consumidas pela tarefa. Ele pode ser preenchido manualmente ou atualizado na conclusão da atividade.
Criado em Ele armazena a data e hora em que a tarefa foi criada.
Atualizado em Ele armazena a data e hora em que a tarefa é atualizada.
Data de início planejada Ele armazena a data e hora em que a tarefa está planejada para iniciar.
Data de término planejada Ele armazena a data e hora em que a tarefa está planejada para terminar.
Data de início real Ele armazena a data e hora reais em que a tarefa foi iniciada.
Data de término real Ele armazena a data e hora reais em que a tarefa foi concluída.
Conteúdo A coluna usada para armazenar os detalhes da tarefa.



Ele usa o status da coluna para rastrear o status da tarefa. O status pode ser Novo, Em andamento ou Concluído. Além disso, o usuário pode preencher manualmente as horas caso nenhuma atividade seja planejada para a tarefa. A tarefa também pode derivar suas horas reais das atividades associadas a ela. A Tabela de Tarefas com as restrições apropriadas é mostrada abaixo.


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 de Tarefa




A Tabela Meta de Tarefas pode ser usada para armazenar informações adicionais sobre tarefas. Abaixo mencionada é a descrição de todas as colunas da Tabela Meta de Tarefas.


ID O ID exclusivo para identificar a meta da tarefa.
ID da tarefa O ID da tarefa para identificar a tarefa pai.
Chave A chave que identifica o meta.
Conteúdo A coluna usada para armazenar os metadados da tarefa.



A Tabela Meta de Tarefas com as restrições apropriadas é mostrada abaixo.


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;


Tabela de Tags e Tabela de Tags de Tarefas




Nesta seção, projetaremos a Tabela de tags e Tabela de tags de tarefas para armazenar as tags de tarefa e seus mapeamentos. Abaixo está a descrição de todas as colunas da Tabela de Tags.


ID O ID exclusivo para identificar a tag.
Título O título da tag.
Slug O slug de tag para formar o URL.



A Tabela de Tags com as restrições apropriadas é mostrada abaixo.


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



Abaixo está a descrição de todas as colunas da Tabela de Tags de Tarefas.


ID da tarefa O ID da tarefa para identificar a tarefa.
ID da tag O ID da tag para identificar a tag.



A Tabela de Tags de Tarefas com as restrições apropriadas é mostrada abaixo.


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);


Tabela de atividades




Nesta seção, projetaremos a Tabela de atividades para armazenar as atividades de tarefa necessárias para concluir a tarefa. Abaixo está a descrição de todas as colunas da Tabela de Atividades.


ID O ID exclusivo para identificar a atividade.
ID de usuário O ID do usuário para identificar o usuário correspondente.
ID da tarefa O ID da tarefa para identificar a tarefa correspondente.
Criado por O ID do usuário para identificar o usuário que adicionou a tarefa.
Atualizado por O ID do usuário para identificar o usuário que atualizou a tarefa.
Título O título da tarefa.
Descrição A descrição da tarefa.
Estado O status da atividade pode ser Novo, Em andamento ou Concluído.
Horas O total de horas consumidas pela atividade. As horas de tarefa correspondentes podem ser atualizadas na conclusão da atividade.
Criado em Ele armazena a data e hora em que a atividade foi criada.
Atualizado em Ele armazena a data e hora em que a atividade é atualizada.
Data de início planejada Ele armazena a data e hora em que a atividade está planejada para iniciar.
Data de término planejada Ele armazena a data e hora em que a atividade está planejada para terminar.
Data de início real Ele armazena a data e hora reais em que a atividade começou.
Data de término real Ele armazena a data e hora reais em que a atividade terminou.
Conteúdo A coluna usada para armazenar os detalhes da atividade.



Ele usa o status da coluna para rastrear o status da atividade. O status pode ser Novo, Em andamento ou Concluído. Além disso, o usuário pode preencher manualmente as horas de atividade. A tarefa pode derivar suas horas reais das atividades associadas a ela. A Tabela de Atividades com as restrições apropriadas é mostrada abaixo.


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;


Tabela de comentários




Nesta seção, projetaremos a Tabela de comentários para armazenar os comentários da tarefa e da atividade. Abaixo está a descrição de todas as colunas da Tabela de Comentários.


ID O ID exclusivo para identificar a avaliação do produto.
ID da tarefa O ID da tarefa para identificar a tarefa pai.
ID da atividade O ID da atividade para identificar a atividade pai.
Título O título da avaliação.
Criado em Ele armazena a data e hora em que o comentário foi criado.
Atualizado em Ele armazena a data e hora em que o comentário é atualizado.
Conteúdo A coluna usada para armazenar os detalhes do comentário.



A Tabela de Comentários com as restrições apropriadas é mostrada abaixo.


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;


Resumo




Neste tutorial, discutimos o design do banco de dados de um aplicativo de Gerenciamento de Tarefas para gerenciar as tarefas e atividades dos usuários do aplicativo. Também forneceu o design do banco de dados para gerenciar os comentários das tarefas e atividades.



Você pode enviar seus comentários para participar da discussão. Você também pode estar interessado em projetar o banco de dados de Notificações, Evento de Calendário e Lembrete. O esquema completo do banco de dados também está disponível no GitHub.