Tento výukový program poskytuje úplné kroky k návrhu schématu databáze Správce úloh pro správu úloh, aktivit a komentářů uživatelů aplikace. Aplikaci Správce úloh vytvořenou pomocí tohoto návrhu databáze lze použít k ukládání úloh spojených s uživateli. Stejnou aplikaci lze použít ke správě aktivit úkolů a komentářů nebo poznámek.
Diagram vztahů entit nebo návrh vizuální databáze je uveden níže.
Návrh databáze správy úloh
Můžete také navštívit oblíbené výukové programy včetně Jak nainstalovat MySQL 8 na Ubuntu 20.04 LTS, Jak nainstalovat MySQL 8 na Windows, Jak nainstalovat MySQL Workbench na Ubuntu, Jak nainstalovat MySQL 8 s Workbenchem na Windows 10, Databáze RBAC v MySql, Databáze oznámení v MySQL, databáze událostí kalendáře a připomenutí v MySQL, databáze blogů v MySQL, databáze kvízů v MySQL, databáze anket a průzkumů v MySQL, databáze nákupních košíků online v MySQL, databáze inventáře v MySQL a naučte se základní SQL dotazy v MySQL.
Databáze Správce úloh
Úplně prvním krokem je vytvoření databáze Správce úloh. Lze jej vytvořit pomocí dotazu, jak je uvedeno níže.
CREATE SCHEMA `task_manager` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Použil jsem znakovou sadu utf8mb4 pro podporu široké škály znaků.
Tabulka uživatelů
V této části navrhneme Tabulku uživatelů k ukládání uživatelských informací. Uživatelé mohou spravovat své vlastní profily. Uživatelé mohou také používat aplikaci ke správě vlastních úkolů a aktivit. Níže je uveden popis všech sloupců tabulky uživatelů.
ID | Jedinečné ID k identifikaci uživatele. |
ID role | Role uživatele. Může to být správce nebo uživatel. |
Křestní jméno | Křestní jméno uživatele. |
Prostřední jméno | Prostřední jméno uživatele. |
Příjmení | Příjmení uživatele. |
Mobil | Číslo mobilního telefonu uživatele. Lze jej použít pro účely přihlášení a registrace. |
E-mailová adresa uživatele. Lze jej použít pro účely přihlášení a registrace. | |
Hašování hesla | Hash hash hesla vygenerovaný příslušným algoritmem. Musíme se vyhnout ukládání jednoduchých nebo šifrovaných hesel. |
Registrováno na | Tento sloupec lze použít k výpočtu životnosti uživatele s aplikací. |
Poslední přihlášení | Lze jej použít k identifikaci posledního přihlášení uživatele. |
Úvod | Stručné představení uživatele. |
Profil | Podrobnosti o uživateli. |
Tabulka uživatelů s příslušnými omezeními je uvedena níže.
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) );
Tabulka úkolů
V této části navrhneme Tabulku úloh k uložení úkolů. Níže je uveden popis všech sloupců Task Table.
ID | Jedinečné ID k identifikaci úkolu. |
ID uživatele | ID uživatele k identifikaci odpovídajícího uživatele. |
Vytvořil | ID uživatele k identifikaci uživatele, který přidal úkol. |
Aktualizováno | ID uživatele k identifikaci uživatele, který aktualizoval úlohu. |
Název | Název úkolu. |
Popis | Popis úkolu. |
Stav | Stav úkolu může být Nový, Probíhá nebo Dokončeno. |
Otevírací doba | Celkový počet hodin spotřebovaných úkolem. Může být vyplněn ručně nebo aktualizován po dokončení aktivity. |
Vytvořeno v | Ukládá datum a čas, kdy byla úloha vytvořena. |
Aktualizováno dne | Ukládá datum a čas, kdy je úloha aktualizována. |
Plánované datum zahájení | Ukládá datum a čas, kdy je plánováno spuštění úlohy. |
Plánované datum ukončení | Ukládá datum a čas, kdy je plánováno ukončení úlohy. |
Aktuální datum zahájení | Ukládá skutečné datum a čas, kdy úloha začala. |
Aktuální datum ukončení | Ukládá skutečné datum a čas, kdy byla úloha dokončena. |
Obsah | Sloupec používaný k uložení podrobností úkolu. |
Ke sledování stavu úlohy používá stav sloupce. Stav může být buď Nový, Probíhá nebo Dokončeno. Uživatel také může ručně vyplnit hodiny v případě, že pro daný úkol není plánována žádná aktivita. Úkol může také odvodit své skutečné hodiny z činností s ním spojených. Tabulka úloh s příslušnými omezeními je uvedena níže.
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;
Task Meta
Task Meta Table lze použít k uložení dalších informací o úkolech. Níže je uveden popis všech sloupců Task Meta Table.
ID | Jedinečné ID k identifikaci meta úkolu. |
ID úlohy | ID úkolu k identifikaci nadřazeného úkolu. |
Klíč | Klíč identifikující meta. |
Obsah | Sloupec používaný k uložení metadat úlohy. |
Metatabulka úloh s příslušnými omezeními je uvedena níže.
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;
Tabulka značek a tabulka značek úkolů
V této části navrhneme Tabulku značek a Tabulka značek úkolů pro uložení značek úkolů a jejich mapování. Níže je uveden popis všech sloupců tabulky značek.
ID | Jedinečné ID k identifikaci značky. |
Název | Název značky. |
Slimák | Slug značky tvořící adresu URL. |
Tabulka značek s příslušnými omezeními je uvedena níže.
CREATE TABLE `task_manager`.`tag` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`));
Níže je uveden popis všech sloupců Task Tag Table.
ID úlohy | ID úkolu k identifikaci úkolu. |
ID značky | ID značky k identifikaci značky. |
Tabulka značek úkolů s příslušnými omezeními je uvedena níže.
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);
Tabulka aktivit
V této části navrhneme Tabulku aktivit k uložení činností úkolu potřebných k dokončení úkolu. Níže je uveden popis všech sloupců tabulky aktivit.
ID | Jedinečné ID k identifikaci aktivity. |
ID uživatele | ID uživatele k identifikaci odpovídajícího uživatele. |
ID úlohy | ID úkolu k identifikaci odpovídajícího úkolu. |
Vytvořil | ID uživatele k identifikaci uživatele, který přidal úkol. |
Aktualizováno | ID uživatele k identifikaci uživatele, který aktualizoval úlohu. |
Název | Název úkolu. |
Popis | Popis úkolu. |
Stav | Stav aktivity může být Nová, Probíhá nebo Dokončeno. |
Otevírací doba | Celkový počet hodin strávených aktivitou. Odpovídající hodiny úkolu lze aktualizovat po dokončení aktivity. |
Vytvořeno v | Ukládá datum a čas, kdy byla aktivita vytvořena. |
Aktualizováno dne | Ukládá datum a čas, kdy je aktivita aktualizována. |
Plánované datum zahájení | Ukládá datum a čas, kdy je plánováno zahájení aktivity. |
Plánované datum ukončení | Ukládá datum a čas, kdy je plánováno ukončení aktivity. |
Aktuální datum zahájení | Ukládá skutečné datum a čas, kdy aktivita začala. |
Aktuální datum ukončení | Ukládá skutečné datum a čas, kdy aktivita skončila. |
Obsah | Sloupec používaný k uložení podrobností o aktivitě. |
Ke sledování stavu aktivity používá stav sloupce. Stav může být buď Nový, Probíhá nebo Dokončeno. Uživatel může také ručně vyplnit hodiny aktivity. Úkol může odvodit své skutečné hodiny z činností s ním spojených. Tabulka aktivit s příslušnými omezeními je uvedena níže.
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;
Tabulka komentářů
V této sekci navrhneme Tabulku komentářů pro uložení poznámek k úkolům a aktivitám. Níže je uveden popis všech sloupců tabulky komentářů.
ID | Jedinečné ID k identifikaci recenze produktu. |
ID úlohy | ID úkolu k identifikaci nadřazeného úkolu. |
ID aktivity | ID aktivity k identifikaci nadřazené aktivity. |
Název | Název recenze. |
Vytvořeno v | Ukládá datum a čas, kdy byl komentář vytvořen. |
Aktualizováno dne | Ukládá datum a čas, kdy je komentář aktualizován. |
Obsah | Sloupec používaný k uložení podrobností komentáře. |
Tabulka komentářů s příslušnými omezeními je uvedena níže.
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;
Shrnutí
V tomto tutoriálu jsme diskutovali o návrhu databáze aplikace Task Management pro správu úkolů a aktivit uživatelů aplikace. Poskytlo také návrh databáze pro správu komentářů k úkolům a činnostem.
Do diskuse můžete zasílat své komentáře. Může vás také zajímat návrh databáze oznámení, události kalendáře a připomenutí. Kompletní schéma databáze je k dispozici také na GitHubu.