Questo tutorial fornisce i passaggi completi per progettare uno schema di database del Task Manager per gestire le attività, le attività e i commenti degli utenti dell'applicazione. L'applicazione Task Manager creata utilizzando questo design del database può essere utilizzata per archiviare le attività associate agli utenti. La stessa applicazione può essere utilizzata per gestire le attività dell'attività e i commenti o le note.
Il diagramma della relazione tra entità o il design del database visivo è mostrato di seguito.
Progettazione del database di gestione delle attività
Puoi anche visitare i tutorial popolari tra cui Come installare MySQL 8 su Ubuntu 20.04 LTS, Come installare MySQL 8 su Windows, Come installare MySQL Workbench su Ubuntu, Come installare MySQL 8 con Workbench su Windows 10, Database RBAC in MySql, Database delle notifiche in MySQL, database degli eventi del calendario e dei promemoria in MySQL, database dei blog in MySql, database dei quiz in MySQL, database dei sondaggi e dei sondaggi in MySQL, database del carrello degli acquisti online in MySQL, database dell'inventario in MySQL e informazioni sulle query SQL di base in MySQL.
Database del Task Manager
Il primo passo è creare il database di Task Manager. Può essere creato utilizzando la query come mostrato di seguito.
CREATE SCHEMA `task_manager` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ho usato il set di caratteri utf8mb4 per supportare un'ampia gamma di caratteri.
Tabella utenti
In questa sezione, progetteremo la Tabella utente per memorizzare le informazioni sull'utente. Gli utenti possono gestire i propri profili. Inoltre, gli utenti possono utilizzare l'applicazione per gestire le proprie attività e attività. Di seguito è riportata la descrizione di tutte le colonne della Tabella Utente.
ID | L'ID univoco per identificare l'utente. |
ID ruolo | Il ruolo dell'utente. Può essere Amministratore o Utente. |
Nome | Il nome dell'utente. |
Secondo nome | Il secondo nome dell'utente. |
Cognome | Il cognome dell'utente. |
Cellulare | Il numero di cellulare dell'utente. Può essere utilizzato per scopi di accesso e registrazione. |
L'e-mail dell'utente. Può essere utilizzato per scopi di accesso e registrazione. | |
Hash password | L'hash della password generato dall'algoritmo appropriato. Dobbiamo evitare di memorizzare password semplici o crittografate. |
Registrato presso | Questa colonna può essere utilizzata per calcolare la vita dell'utente con l'applicazione. |
Ultimo accesso | Può essere utilizzato per identificare l'ultimo accesso dell'utente. |
Introduzione | Una breve introduzione dell'Utente. |
Profilo | Dettagli utente. |
Di seguito è mostrata la tabella utente con i vincoli appropriati.
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) );
Tabella delle attività
In questa sezione, progetteremo la Tabella delle attività per memorizzare le attività. Di seguito è indicata la descrizione di tutte le colonne della Task Table.
ID | L'ID univoco per identificare l'attività. |
ID utente | L'ID utente per identificare l'utente corrispondente. |
Creato da | L'ID utente per identificare l'utente che ha aggiunto l'attività. |
Aggiornato da | L'ID utente per identificare l'utente che ha aggiornato l'attività. |
Titolo | Il titolo dell'attività. |
Descrizione | La descrizione dell'attività. |
Stato | Lo stato dell'attività può essere Nuovo, In corso o Completato. |
Orari | Le ore totali consumate dall'attività. Può essere compilato manualmente o aggiornato al completamento dell'attività. |
Creato a | Memorizza la data e l'ora in cui viene creata l'attività. |
Aggiornato a | Memorizza la data e l'ora in cui l'attività viene aggiornata. |
Data di inizio pianificata | Memorizza la data e l'ora in cui è pianificato l'inizio dell'attività. |
Data di fine pianificata | Memorizza la data e l'ora in cui è prevista la fine dell'attività. |
Data di inizio effettiva | Memorizza la data e l'ora effettive in cui è iniziata l'attività. |
Data di fine effettiva | Memorizza la data e l'ora effettive in cui l'attività è terminata. |
Contenuto | La colonna utilizzata per memorizzare i dettagli dell'attività. |
Utilizza lo stato della colonna per tenere traccia dello stato dell'attività. Lo stato può essere Nuovo, In corso o Completato. Inoltre, l'utente può riempire manualmente le ore nel caso in cui non sia pianificata alcuna attività per l'attività. L'attività può anche derivare le sue ore effettive dalle attività ad essa associate. La tabella delle attività con i vincoli appropriati è quella mostrata di seguito.
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 attività
La Task Meta Table può essere utilizzata per memorizzare informazioni aggiuntive sulle attività. Di seguito è menzionata la descrizione di tutte le colonne della Task Meta Table.
ID | L'ID univoco per identificare la meta dell'attività. |
ID attività | L'ID attività per identificare l'attività principale. |
Chiave | La chiave che identifica il meta. |
Contenuto | La colonna utilizzata per memorizzare i metadati dell'attività. |
La Task Meta Table con i vincoli appropriati è quella mostrata di seguito.
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;
Tabella dei tag e tabella dei tag delle attività
In questa sezione, progetteremo la Tabella dei tag e Tabella tag attività per memorizzare i tag attività e le relative mappature. Di seguito è riportata la descrizione di tutte le colonne della Tag Table.
ID | L'ID univoco per identificare il tag. |
Titolo | Il titolo del tag. |
Slug | Il tag slug per formare l'URL. |
La tabella dei tag con i vincoli appropriati è quella mostrata di seguito.
CREATE TABLE `task_manager`.`tag` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`));
Di seguito è indicata la descrizione di tutte le colonne della Task Tag Table.
ID attività | L'ID attività per identificare l'attività. |
ID tag | L'ID tag per identificare il tag. |
La tabella dei tag attività con i vincoli appropriati è quella mostrata di seguito.
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);
Tabella delle attività
In questa sezione, progetteremo la Tabella delle attività per memorizzare le attività dell'attività necessarie per completare l'attività. Di seguito è riportata la descrizione di tutte le colonne della Tabella delle Attività.
ID | L'ID univoco per identificare l'attività. |
ID utente | L'ID utente per identificare l'utente corrispondente. |
ID attività | L'ID attività per identificare l'attività corrispondente. |
Creato da | L'ID utente per identificare l'utente che ha aggiunto l'attività. |
Aggiornato da | L'ID utente per identificare l'utente che ha aggiornato l'attività. |
Titolo | Il titolo dell'attività. |
Descrizione | La descrizione dell'attività. |
Stato | Lo stato dell'attività può essere Nuovo, In corso o Completato. |
Orari | Le ore totali consumate dall'attività. Le ore di attività corrispondenti possono essere aggiornate al completamento dell'attività. |
Creato a | Memorizza la data e l'ora in cui viene creata l'attività. |
Aggiornato a | Memorizza la data e l'ora in cui l'attività viene aggiornata. |
Data di inizio pianificata | Memorizza la data e l'ora in cui è previsto l'inizio dell'attività. |
Data di fine pianificata | Memorizza la data e l'ora in cui è prevista la fine dell'attività. |
Data di inizio effettiva | Memorizza la data e l'ora effettive in cui è iniziata l'attività. |
Data di fine effettiva | Memorizza la data e l'ora effettive in cui l'attività è terminata. |
Contenuto | La colonna utilizzata per memorizzare i dettagli dell'attività. |
Utilizza lo stato della colonna per tenere traccia dello stato dell'attività. Lo stato può essere Nuovo, In corso o Completato. Inoltre, l'utente può compilare manualmente le ore di attività. L'attività può ricavare le sue ore effettive dalle attività ad essa associate. La tabella delle attività con i vincoli appropriati è quella mostrata di seguito.
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;
Tabella dei commenti
In questa sezione, progetteremo la Tabella dei commenti per memorizzare i commenti di attività e attività. Di seguito è riportata la descrizione di tutte le colonne della Tabella dei commenti.
ID | L'ID univoco per identificare la recensione del prodotto. |
ID attività | L'ID attività per identificare l'attività principale. |
ID attività | L'ID attività per identificare l'attività principale. |
Titolo | Il titolo della recensione. |
Creato a | Memorizza la data e l'ora in cui viene creato il commento. |
Aggiornato a | Memorizza la data e l'ora in cui il commento viene aggiornato. |
Contenuto | La colonna utilizzata per memorizzare i dettagli del commento. |
La tabella dei commenti con i vincoli appropriati è quella mostrata di seguito.
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;
Riepilogo
In questo tutorial, abbiamo discusso la progettazione del database di un'applicazione di gestione delle attività per gestire le attività e le attività degli utenti dell'applicazione. Ha inoltre fornito la progettazione del database per gestire i commenti dei compiti e delle attività.
Puoi inviare i tuoi commenti per partecipare alla discussione. Potresti anche essere interessato a progettare il database delle notifiche, dell'evento del calendario e del promemoria. Lo schema completo del database è disponibile anche su GitHub.