Mysql
 sql >> Base de données >  >> RDS >> Mysql

Guide pour concevoir une base de données pour le gestionnaire de tâches dans MySQL

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