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. |
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.