Ce didacticiel fournit les étapes complètes pour concevoir un schéma de base de données du gestionnaire de tâches pour gérer les tâches, les activités et les commentaires des utilisateurs de l'application. L'application Gestionnaire de tâches construite à l'aide de cette conception de base de données peut être utilisée pour stocker les tâches associées aux utilisateurs. La même application peut être utilisée pour gérer les activités des tâches et les commentaires ou notes.
Le diagramme de relation d'entité ou la conception visuelle de la base de données est illustré ci-dessous.
Conception de la base de données de gestion des tâches
Vous pouvez également consulter les didacticiels populaires, notamment Comment installer MySQL 8 sur Ubuntu 20.04 LTS, Comment installer MySQL 8 sur Windows, Comment installer MySQL Workbench sur Ubuntu, Comment installer MySQL 8 avec Workbench sur Windows 10, Base de données RBAC dans MySql, Base de données de notifications dans MySQL, base de données d'événements de calendrier et de rappels dans MySQL, base de données de blogs dans MySql, base de données de quiz dans MySQL, base de données de sondages et d'enquêtes dans MySQL, base de données de paniers d'achat en ligne dans MySQL, base de données d'inventaire dans MySQL et apprentissage des requêtes SQL de base dans MySQL.
Base de données du gestionnaire de tâches
La toute première étape consiste à créer la base de données du gestionnaire de tâches. Il peut être créé à l'aide de la requête comme indiqué ci-dessous.
CREATE SCHEMA `task_manager` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
J'ai utilisé le jeu de caractères utf8mb4 pour prendre en charge un large éventail de caractères.
Tableau des utilisateurs
Dans cette section, nous allons concevoir la table des utilisateurs pour stocker les informations de l'utilisateur. Les utilisateurs peuvent gérer leurs propres profils. De plus, les utilisateurs peuvent utiliser l'application pour gérer leurs propres tâches et activités. Vous trouverez ci-dessous la description de toutes les colonnes de la table des utilisateurs.
Identifiant | L'identifiant unique pour identifier l'utilisateur. |
Identifiant du rôle | Le rôle de l'utilisateur. Il peut s'agir d'un administrateur ou d'un utilisateur. |
Prénom | Le prénom de l'utilisateur. |
Deuxième prénom | Le deuxième prénom de l'utilisateur. |
Nom de famille | Le nom de famille de l'utilisateur. |
Mobile | Le numéro de portable de l'utilisateur. Il peut être utilisé à des fins de connexion et d'enregistrement. |
L'adresse e-mail de l'utilisateur. Il peut être utilisé à des fins de connexion et d'enregistrement. | |
Hachage du mot de passe | Le hachage du mot de passe généré par l'algorithme approprié. Nous devons éviter de stocker des mots de passe simples ou cryptés. |
Enregistré à | Cette colonne peut être utilisée pour calculer la durée de vie de l'utilisateur avec l'application. |
Dernière connexion | Il peut être utilisé pour identifier la dernière connexion de l'utilisateur. |
Introduction | Une brève présentation de l'utilisateur. |
Profil | Détails de l'utilisateur. |
La table utilisateur avec les contraintes appropriées est illustrée ci-dessous.
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) );
Tableau des tâches
Dans cette section, nous allons concevoir le tableau des tâches pour stocker les tâches. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des tâches.
Identifiant | L'identifiant unique pour identifier la tâche. |
Identifiant utilisateur | L'identifiant de l'utilisateur pour identifier l'utilisateur correspondant. |
Créé par | L'ID utilisateur pour identifier l'utilisateur qui a ajouté la tâche. |
Mise à jour par | L'ID utilisateur pour identifier l'utilisateur qui a mis à jour la tâche. |
Titre | Le titre de la tâche. |
Description | La description de la tâche. |
Statut | Le statut de la tâche peut être Nouveau, En cours ou Terminé. |
Heures | Le nombre total d'heures consommées par la tâche. Il peut être rempli manuellement ou mis à jour à la fin de l'activité. |
Créé à | Il stocke la date et l'heure auxquelles la tâche est créée. |
Mis à jour à | Il stocke la date et l'heure auxquelles la tâche est mise à jour. |
Date de début prévue | Il stocke la date et l'heure auxquelles la tâche doit commencer. |
Date de fin prévue | Il stocke la date et l'heure auxquelles la tâche doit se terminer. |
Date de début réelle | Il stocke la date et l'heure réelles auxquelles la tâche a commencé. |
Date de fin réelle | Il stocke la date et l'heure réelles auxquelles la tâche s'est terminée. |
Contenu | La colonne utilisée pour stocker les détails de la tâche. |
Il utilise l'état de la colonne pour suivre l'état de la tâche. Le statut peut être Nouveau, En cours ou Terminé. De plus, l'utilisateur peut remplir manuellement les heures au cas où aucune activité n'est prévue pour la tâche. La tâche peut également dériver ses heures réelles des activités qui lui sont associées. Le tableau des tâches avec les contraintes appropriées est illustré ci-dessous.
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;
Méta tâche
La méta-table des tâches peut être utilisée pour stocker des informations supplémentaires sur les tâches. Vous trouverez ci-dessous la description de toutes les colonnes de la méta-table des tâches.
Identifiant | L'identifiant unique pour identifier la méta de la tâche. |
Identifiant de tâche | L'identifiant de la tâche pour identifier la tâche parent. |
Clé | La clé identifiant la méta. |
Contenu | La colonne utilisée pour stocker les métadonnées de la tâche. |
La méta-table des tâches avec les contraintes appropriées est illustrée ci-dessous.
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;
Tableau des balises et tableau des balises des tâches
Dans cette section, nous allons concevoir la Table des balises et tableau des étiquettes de tâches pour stocker les balises de tâche et leurs mappages. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des balises.
Identifiant | L'identifiant unique pour identifier la balise. |
Titre | Le titre de la balise. |
limace | Le slug de balise pour former l'URL. |
Le tableau des balises avec les contraintes appropriées est illustré ci-dessous.
CREATE TABLE `task_manager`.`tag` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`));
Vous trouverez ci-dessous la description de toutes les colonnes du tableau des balises de tâche.
ID de tâche | L'ID de tâche pour identifier la tâche. |
Identifiant de la balise | L'identifiant de balise pour identifier la balise. |
Le tableau des balises de tâche avec les contraintes appropriées est illustré ci-dessous.
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);
Tableau des activités
Dans cette section, nous allons concevoir le tableau d'activité pour stocker les activités de tâche requises pour terminer la tâche. Vous trouverez ci-dessous la description de toutes les colonnes du tableau d'activité.
Identifiant | L'identifiant unique pour identifier l'activité. |
Identifiant utilisateur | L'identifiant de l'utilisateur pour identifier l'utilisateur correspondant. |
Identifiant de tâche | L'identifiant de la tâche pour identifier la tâche correspondante. |
Créé par | L'ID utilisateur pour identifier l'utilisateur qui a ajouté la tâche. |
Mise à jour par | L'ID utilisateur pour identifier l'utilisateur qui a mis à jour la tâche. |
Titre | Le titre de la tâche. |
Description | La description de la tâche. |
Statut | Le statut de l'activité peut être Nouveau, En cours ou Terminé. |
Heures | Le nombre total d'heures consommées par l'activité. Les heures de tâche correspondantes peuvent être mises à jour à la fin de l'activité. |
Créé à | Il stocke la date et l'heure auxquelles l'activité est créée. |
Mis à jour à | Il stocke la date et l'heure auxquelles l'activité est mise à jour. |
Date de début prévue | Il stocke la date et l'heure auxquelles l'activité doit commencer. |
Date de fin prévue | Il stocke la date et l'heure auxquelles l'activité doit se terminer. |
Date de début réelle | Il stocke la date et l'heure réelles auxquelles l'activité a commencé. |
Date de fin réelle | Il stocke la date et l'heure réelles auxquelles l'activité s'est terminée. |
Contenu | La colonne utilisée pour stocker les détails de l'activité. |
Il utilise l'état de la colonne pour suivre l'état de l'activité. Le statut peut être Nouveau, En cours ou Terminé. De plus, l'utilisateur peut saisir manuellement les heures d'activité. La tâche peut dériver ses heures réelles des activités qui lui sont associées. Le tableau des activités avec les contraintes appropriées est illustré ci-dessous.
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;
Tableau des commentaires
Dans cette section, nous allons concevoir le tableau des commentaires pour stocker les commentaires de tâche et d'activité. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des commentaires.
Identifiant | L'identifiant unique pour identifier l'avis sur le produit. |
Identifiant de tâche | L'identifiant de la tâche pour identifier la tâche parent. |
Identifiant d'activité | L'identifiant de l'activité pour identifier l'activité parente. |
Titre | Le titre de l'avis. |
Créé à | Il stocke la date et l'heure auxquelles le commentaire est créé. |
Mis à jour à | Il stocke la date et l'heure auxquelles le commentaire est mis à jour. |
Contenu | La colonne utilisée pour stocker les détails du commentaire. |
Le tableau des commentaires avec les contraintes appropriées est illustré ci-dessous.
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;
Résumé
Dans ce didacticiel, nous avons abordé la conception de la base de données d'une application de gestion des tâches pour gérer les tâches et les activités des utilisateurs de l'application. Il a également fourni la conception de la base de données pour gérer les commentaires des tâches et des activités.
Vous pouvez soumettre vos commentaires pour participer à la discussion. Vous pouvez également être intéressé par la conception de la base de données des notifications, des événements de calendrier et des rappels. Le schéma complet de la base de données est également disponible sur GitHub.