sql >> Database >  >> RDS >> Mysql

Gids voor het ontwerpen van een database voor Taakbeheer in MySQL

Deze zelfstudie biedt de volledige stappen voor het ontwerpen van een databaseschema van Taakbeheer om de taken, activiteiten en opmerkingen van de toepassingsgebruikers te beheren. De toepassing Taakbeheer die met dit databaseontwerp is gebouwd, kan worden gebruikt om de taken op te slaan die aan de gebruikers zijn gekoppeld. Dezelfde applicatie kan worden gebruikt om de taakactiviteiten en opmerkingen of notities te beheren.

Het entiteitsrelatiediagram of visueel databaseontwerp wordt hieronder weergegeven.

Databaseontwerp voor taakbeheer

U kunt ook de populaire tutorials bezoeken, waaronder MySQL 8 installeren op Ubuntu 20.04 LTS, MySQL 8 installeren op Windows, MySQL Workbench installeren op Ubuntu, MySQL 8 installeren met Workbench op Windows 10, RBAC Database in MySql, Meldingsdatabase in MySQL, kalendergebeurtenis- en herinneringsdatabase in MySQL, blogdatabase in MySql, quizdatabase in MySQL, enquête- en enquêtedatabase in MySQL, online winkelwagendatabase in MySQL, inventarisdatabase in MySQL en leer elementaire SQL-query's in MySQL.

Taakbeheer-database

De allereerste stap is het maken van de Task Manager-database. Het kan worden gemaakt met behulp van de onderstaande query.

CREATE SCHEMA `task_manager` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Ik heb de tekenset utf8mb4 . gebruikt om een ​​breed scala aan karakters te ondersteunen.

Gebruikerstabel

In deze sectie zullen we de Gebruikerstabel . ontwerpen om gebruikersinformatie op te slaan. Gebruikers kunnen hun eigen profielen beheren. Ook kunnen de gebruikers de applicatie gebruiken om hun eigen taken en activiteiten te beheren. Hieronder staat de beschrijving van alle kolommen van de gebruikerstabel.

Id Het unieke ID om de gebruiker te identificeren.
Rol-ID De rol van de gebruiker. Dit kan beheerder of gebruiker zijn.
Voornaam De voornaam van de gebruiker.
Middelste naam De middelste naam van de gebruiker.
Achternaam De achternaam van de gebruiker.
Mobiel Het mobiele nummer van de gebruiker. Het kan worden gebruikt voor aanmeldings- en registratiedoeleinden.
E-mail Het e-mailadres van de gebruiker. Het kan worden gebruikt voor aanmeldings- en registratiedoeleinden.
Wachtwoordhash De wachtwoord-hash gegenereerd door het juiste algoritme. We moeten vermijden om gewone of versleutelde wachtwoorden op te slaan.
Geregistreerd bij Deze kolom kan worden gebruikt om de levensduur van de gebruiker met de applicatie te berekenen.
Laatste aanmelding Het kan worden gebruikt om de laatste login van de gebruiker te identificeren.
Inleiding Een korte introductie van de gebruiker.
Profiel Gebruikersgegevens.

De gebruikerstabel met de juiste beperkingen wordt hieronder weergegeven.

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) );

Takentabel

In deze sectie zullen we de Taaktabel . ontwerpen om de taken op te slaan. Hieronder staat de beschrijving van alle kolommen van de Taaktabel.

Id Het unieke ID om de taak te identificeren.
Gebruikers-ID De gebruikers-ID om de corresponderende gebruiker te identificeren.
Gemaakt door Het gebruikers-ID om de gebruiker te identificeren die de taak heeft toegevoegd.
Bijgewerkt door Het gebruikers-ID om de gebruiker te identificeren die de taak heeft bijgewerkt.
Titel De titel van de taak.
Beschrijving De beschrijving van de taak.
Status De status van de taak kan Nieuw, In uitvoering of Voltooid zijn.
Uren Het totale aantal uren dat door de taak is verbruikt. Het kan handmatig worden ingevuld of worden bijgewerkt wanneer de activiteit is voltooid.
Gemaakt op Het slaat de datum en tijd op waarop de taak is gemaakt.
Bijgewerkt om Het slaat de datum en tijd op waarop de taak is bijgewerkt.
Geplande startdatum Het slaat de datum en tijd op waarop de taak gepland is om te starten.
Geplande einddatum Het slaat de datum en tijd op waarop de taak is gepland om te eindigen.
Werkelijke startdatum Het slaat de werkelijke datum en tijd op waarop de taak begon.
Werkelijke einddatum Het slaat de werkelijke datum en tijd op waarop de taak is voltooid.
Inhoud De kolom die wordt gebruikt om de taakdetails op te slaan.

Het gebruikt de kolomstatus om de status van de taak bij te houden. De status kan Nieuw, In uitvoering of Voltooid zijn. Ook kan de gebruiker de uren handmatig invullen als er geen activiteit gepland is voor de taak. De taak kan ook zijn werkelijke uren afleiden uit de bijbehorende activiteiten. De takentabel met de juiste beperkingen is zoals hieronder weergegeven.

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;

Taakmeta

De Task Meta Table kan worden gebruikt om aanvullende informatie over taken op te slaan. Hieronder staat de beschrijving van alle kolommen van de Taak Meta Tabel.

Id Het unieke ID om de taakmeta te identificeren.
Taak-ID De taak-ID om de bovenliggende taak te identificeren.
Sleutel De sleutel die de meta identificeert.
Inhoud De kolom die wordt gebruikt om de metadata van de taak op te slaan.

De Taak Meta Tabel met de juiste beperkingen is zoals hieronder getoond.

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;

Tag-tabel en taaktag-tabel

In deze sectie zullen we de Tag-tabel . ontwerpen en Taaktagtabel om de taaktags en hun toewijzingen op te slaan. Hieronder staat de beschrijving van alle kolommen van de Tag-tabel.

Id Het unieke ID om de tag te identificeren.
Titel De tagtitel.
Naaktslak De tag-slug om de URL te vormen.

De tagtabel met de juiste beperkingen is zoals hieronder weergegeven.

CREATE TABLE `task_manager`.`tag` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`));

Hieronder staat de beschrijving van alle kolommen van de Taak Tag-tabel.

Taak-ID De taak-ID om de taak te identificeren.
Tag-ID De tag-ID om de tag te identificeren.

De Taak Tag-tabel met de juiste beperkingen is zoals hieronder weergegeven.

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);

Activiteitentabel

In deze sectie zullen we de Activiteitentabel . ontwerpen om de taakactiviteiten op te slaan die nodig zijn om de taak te voltooien. Hieronder vindt u de beschrijving van alle kolommen van de activiteitentabel.

Id Het unieke ID om de activiteit te identificeren.
Gebruikers-ID De gebruikers-ID om de corresponderende gebruiker te identificeren.
Taak-ID De taak-ID om de bijbehorende taak te identificeren.
Gemaakt door Het gebruikers-ID om de gebruiker te identificeren die de taak heeft toegevoegd.
Bijgewerkt door Het gebruikers-ID om de gebruiker te identificeren die de taak heeft bijgewerkt.
Titel De titel van de taak.
Beschrijving De beschrijving van de taak.
Status De status van de activiteit kan Nieuw, In uitvoering of Voltooid zijn.
Uren Het totale aantal uren dat door de Activiteit is verbruikt. De bijbehorende taakuren kunnen worden bijgewerkt na voltooiing van de activiteit.
Gemaakt op Het slaat de datum en tijd op waarop de activiteit is aangemaakt.
Bijgewerkt om Het slaat de datum en tijd op waarop de activiteit is bijgewerkt.
Geplande startdatum Het slaat de datum en tijd op waarop de activiteit gepland is om te beginnen.
Geplande einddatum Het slaat de datum en tijd op waarop de activiteit is gepland om te eindigen.
Werkelijke startdatum Het slaat de werkelijke datum en tijd op waarop de activiteit begon.
Werkelijke einddatum Het slaat de werkelijke datum en tijd op waarop de activiteit eindigde.
Inhoud De kolom die wordt gebruikt om de activiteitsdetails op te slaan.

Het gebruikt de kolomstatus om de status van de activiteit bij te houden. De status kan Nieuw, In uitvoering of Voltooid zijn. Ook kan de gebruiker handmatig de activiteitsuren invullen. De taak kan zijn werkelijke uren afleiden uit de bijbehorende activiteiten. De activiteitentabel met de juiste beperkingen is zoals hieronder weergegeven.

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;

Commentaartabel

In deze sectie zullen we de Commentaartabel . ontwerpen om de taak- en activiteitsopmerkingen op te slaan. Hieronder staat de beschrijving van alle kolommen van de commentaartabel.

Id De unieke id om de productrecensie te identificeren.
Taak-ID De taak-ID om de bovenliggende taak te identificeren.
Activiteit-ID De activiteits-ID om de bovenliggende activiteit te identificeren.
Titel De recensietitel.
Gemaakt op Het slaat de datum en tijd op waarop de opmerking is gemaakt.
Bijgewerkt om Het slaat de datum en tijd op waarop de opmerking is bijgewerkt.
Inhoud De kolom die wordt gebruikt om de reactiedetails op te slaan.

De opmerkingentabel met de juiste beperkingen is zoals hieronder weergegeven.

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;

Samenvatting

In deze zelfstudie hebben we het databaseontwerp van een taakbeheertoepassing besproken om de taken en activiteiten van de toepassingsgebruikers te beheren. Het leverde ook het databaseontwerp om de opmerkingen van de taken en activiteiten te beheren.

U kunt uw opmerkingen indienen om deel te nemen aan de discussie. Mogelijk bent u ook geïnteresseerd in het ontwerpen van de database van de meldingen, en kalendergebeurtenis en herinnering. Het volledige databaseschema is ook beschikbaar op GitHub.


  1. Leer MySQL / MariaDB voor beginners - deel 1

  2. Hoe kan ik deze opmerkingen in een MySQL-dump verwijderen?

  3. Een databaseback-up herstellen in OpenCart 1.5

  4. MAKETIME() Voorbeelden – MySQL