Този урок предоставя пълните стъпки за проектиране на схема на база данни на диспечера на задачите за управление на задачите, дейностите и коментарите на потребителите на приложението. Приложението Task Manager, създадено с този дизайн на база данни, може да се използва за съхраняване на задачите, свързани с потребителите. Същото приложение може да се използва за управление на дейностите на задачите и коментари или бележки.
Диаграмата на взаимоотношенията на обектите или визуалният дизайн на базата данни е показан по-долу.
Проектиране на база данни за управление на задачи
Можете също да посетите популярните уроци, включително Как да инсталирате MySQL 8 на Ubuntu 20.04 LTS, Как да инсталирате MySQL 8 на Windows, Как да инсталирате MySQL Workbench на Ubuntu, Как да инсталирате MySQL 8 с Workbench на Windows 10, RBAC база данни в MySql, База данни за известия в MySQL, база данни за календарни събития и напомняния в MySQL, база данни за блогове в MySql, база данни за тестове в MySQL, база данни за анкети и анкети в MySQL, база данни за онлайн пазарски кошници в MySQL, база данни за инвентаризация в MySQL и в MySQL Queries за обучение.
База данни на диспечера на задачите
Първата стъпка е да създадете базата данни на диспечера на задачите. Може да се създаде с помощта на заявката, както е показано по-долу.
CREATE SCHEMA `task_manager` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Използвал съм набора от знаци utf8mb4 за поддръжка на широк спектър от знаци.
Таблица с потребители
В този раздел ще проектираме Таблица на потребителите за съхраняване на потребителска информация. Потребителите могат да управляват собствените си профили. Също така, потребителите могат да използват приложението, за да управляват собствените си задачи и дейности. По-долу е посочено описанието на всички колони на потребителската таблица.
Id | Уникалният идентификатор за идентифициране на потребителя. |
Идентификатор на ролята | Ролята на потребителя. Може да бъде администратор или потребител. |
Име | Първото име на потребителя. |
Биринно име | Биринното име на потребителя. |
Фамилия | Фамилията на потребителя. |
Мобилни | Мобилният номер на потребителя. Може да се използва за влизане и регистрация. |
Имейл | Имейлът на потребителя. Може да се използва за влизане и регистрация. |
Хеш на парола | Хешът на паролата, генериран от подходящия алгоритъм. Трябва да избягваме съхраняването на обикновени или криптирани пароли. |
Регистриран в | Тази колона може да се използва за изчисляване на живота на потребителя с приложението. |
Последно влизане | Може да се използва за идентифициране на последното влизане на потребителя. |
Въведение | Кратко представяне на потребителя. |
Профил | Подробности за потребителя. |
Потребителската таблица със съответните ограничения е показана по-долу.
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) );
Таблица със задачи
В този раздел ще проектираме Таблица със задачи за съхраняване на задачите. По-долу е споменато описанието на всички колони на таблицата със задачи.
Id | Уникалният идентификатор за идентифициране на задачата. |
Потребителски идентификатор | Потребителският идентификатор за идентифициране на съответния потребител. |
Създадено от | Потребителският идентификатор за идентифициране на потребителя, добавил задачата. |
Актуализирано от | Потребителският идентификатор за идентифициране на потребителя, който е актуализирал задачата. |
Заглавие | Заглавието на задачата. |
Описание | Описанието на задачата. |
Състояние | Състоянието на задачата може да бъде Нова, В процес на изпълнение или Завършена. |
Работно време | Общите часове, изразходвани от задачата. Може да се попълни ръчно или да се актуализира при приключване на дейността. |
Създаден в | Той съхранява датата и часа, в които е създадена задачата. |
Актуализирано в | Той съхранява датата и часа, в които задачата се актуализира. |
Планирана начална дата | Той съхранява датата и часа, в които се планира да започне задачата. |
Планирана крайна дата | Той съхранява датата и часа, в които се планира да приключи задачата. |
Действителна начална дата | Той съхранява действителната дата и час, в който е започнала задачата. |
Действителна крайна дата | Той съхранява действителната дата и час, в които задачата е приключила. |
Съдържание | Колоната, използвана за съхраняване на подробностите за задачата. |
Той използва състоянието на колоната за проследяване на състоянието на задачата. Състоянието може да бъде или Ново, В процес на изпълнение или Завършено. Също така, потребителят може ръчно да попълни часовете, в случай че не е планирана дейност за задачата. Задачата може също да извлече действителните си часове от дейностите, свързани с нея. Таблицата със задачи със съответните ограничения е, както е показано по-долу.
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;
Мета задача
Метатаблицата на задачите може да се използва за съхраняване на допълнителна информация за задачите. По-долу е посочено описанието на всички колони на метатаблицата на задачите.
Id | Уникалният идентификатор за идентифициране на мета задачата. |
Идентификатор на задача | Идентификаторът на задачата за идентифициране на родителската задача. |
Ключ | Ключът, идентифициращ мета. |
Съдържание | Колоната, използвана за съхраняване на метаданните на задачата. |
Мета таблицата на задачите със съответните ограничения е както е показано по-долу.
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;
Таблица с маркери и Таблица с маркери на задачи
В този раздел ще проектираме Таблица с етикети и Таблица с маркери на задачите за съхраняване на етикетите на задачите и техните съпоставяния. По-долу е споменато описанието на всички колони на таблицата с етикети.
Id | Уникалният идентификатор за идентифициране на маркера. |
Заглавие | Заглавието на маркера. |
Плюс | Програмата на маркера за формиране на URL адреса. |
Таблицата с етикети със съответните ограничения е както е показано по-долу.
CREATE TABLE `task_manager`.`tag` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`));
По-долу е посочено описанието на всички колони на таблицата с маркери на задачите.
Идентификатор на задача | Идентификаторът на задачата за идентифициране на задачата. |
Идентификатор на маркера | Идентификаторът на маркера за идентифициране на маркера. |
Таблицата с маркери на задачите със съответните ограничения е както е показано по-долу.
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);
Таблица с активности
В този раздел ще проектираме Таблица за активности за съхраняване на дейностите по задачата, необходими за изпълнение на задачата. По-долу е споменато описанието на всички колони на таблицата с активности.
Id | Уникалният идентификатор за идентифициране на дейността. |
Потребителски идентификатор | Потребителският идентификатор за идентифициране на съответния потребител. |
Идентификатор на задача | Идентификаторът на задачата за идентифициране на съответната задача. |
Създадено от | Потребителският идентификатор за идентифициране на потребителя, добавил задачата. |
Актуализирано от | Потребителският идентификатор за идентифициране на потребителя, който е актуализирал задачата. |
Заглавие | Заглавието на задачата. |
Описание | Описанието на задачата. |
Състояние | Състоянието на дейността може да бъде Нова, В ход или Завършена. |
Работно време | Общият брой часове, изразходвани от дейността. Съответните часове на задачите могат да бъдат актуализирани при завършване на дейността. |
Създаден в | Той съхранява датата и часа, в които е създадена дейността. |
Актуализирано в | Той съхранява датата и часа, в които дейността се актуализира. |
Планирана начална дата | Той съхранява датата и часа, в които се планира да започне дейността. |
Планирана крайна дата | Той съхранява датата и часа, в които се планира да приключи дейността. |
Действителна начална дата | Той съхранява действителната дата и час, в който е започнала дейността. |
Действителна крайна дата | Той съхранява действителната дата и час, в които дейността е приключила. |
Съдържание | Колоната, използвана за съхраняване на подробностите за дейността. |
Той използва състоянието на колоната за проследяване на състоянието на дейността. Състоянието може да бъде или Ново, В процес на изпълнение или Завършено. Също така, потребителят може ръчно да попълни часовете за активност. Задачата може да извлече действителните си часове от дейностите, свързани с нея. Таблицата на дейностите със съответните ограничения е както е показано по-долу.
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;
Таблица с коментари
В този раздел ще проектираме Таблица за коментари за съхраняване на коментарите за задачата и дейността. По-долу е споменато описанието на всички колони на таблицата с коментари.
Id | Уникалният идентификатор за идентифициране на прегледа на продукта. |
Идентификатор на задача | Идентификаторът на задачата за идентифициране на родителската задача. |
Идентификатор на активност | Идентификаторът на дейността за идентифициране на родителската дейност. |
Заглавие | Заглавието на рецензията. |
Създаден в | Той съхранява датата и часа, в които е създаден коментарът. |
Актуализирано в | Той съхранява датата и часа, в които коментарът е актуализиран. |
Съдържание | Колоната, използвана за съхраняване на подробностите за коментара. |
Таблицата с коментари със съответните ограничения е както е показано по-долу.
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;
Резюме
В този урок обсъдихме дизайна на база данни на приложение за управление на задачи за управление на задачите и дейностите на потребителите на приложението. Той също така предостави дизайна на базата данни за управление на коментарите на задачите и дейностите.
Можете да изпратите вашите коментари, за да се присъедините към дискусията. Може също да се интересувате от проектирането на базата данни за известия, календарно събитие и напомняне. Пълната схема на базата данни е достъпна и на GitHub.