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