Mysql
 sql >> Database >  >> RDS >> Mysql

Guida alla progettazione di database per Task Manager in MySQL

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