Ten samouczek zawiera wszystkie kroki projektowania schematu bazy danych Menedżera zadań w celu zarządzania zadaniami, działaniami i komentarzami użytkowników aplikacji. Aplikacja Task Manager zbudowana przy użyciu tego projektu bazy danych może służyć do przechowywania zadań związanych z użytkownikami. Ta sama aplikacja może być używana do zarządzania zadaniami i komentarzami lub notatkami.
Diagram relacji encji lub wizualny projekt bazy danych pokazano poniżej.
Projektowanie bazy danych zarządzania zadaniami
Możesz również odwiedzić popularne samouczki, w tym Jak zainstalować MySQL 8 na Ubuntu 20.04 LTS, Jak zainstalować MySQL 8 w systemie Windows, Jak zainstalować MySQL Workbench na Ubuntu, Jak zainstalować MySQL 8 z Workbench na Windows 10, Baza danych RBAC w MySql, Baza danych powiadomień w MySQL, Baza zdarzeń kalendarza i przypomnień w MySQL, Baza blogów w MySql, Baza danych quizów w MySQL, Baza ankiet i ankiet w MySQL, Baza danych koszyka zakupów online w MySQL, Baza danych zapasów w MySQL i Nauka podstawowych zapytań SQL w MySQL.
Baza danych Menedżera zadań
Pierwszym krokiem jest utworzenie bazy danych Menedżera zadań. Można go utworzyć za pomocą zapytania, jak pokazano poniżej.
CREATE SCHEMA `task_manager` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Użyłem zestawu znaków utf8mb4 do obsługi szerokiej gamy znaków.
Tabela użytkowników
W tej sekcji zaprojektujemy Tabelę użytkowników do przechowywania informacji o użytkowniku. Użytkownicy mogą zarządzać własnymi profilami. Użytkownicy mogą również wykorzystywać aplikację do zarządzania własnymi zadaniami i czynnościami. Poniżej znajduje się opis wszystkich kolumn tabeli użytkowników.
Identyfikator | Unikalny identyfikator do identyfikacji użytkownika. |
Identyfikator roli | Rola użytkownika. Może to być Administrator lub Użytkownik. |
Imię | Imię użytkownika. |
Drugie imię | Drugie imię użytkownika. |
Nazwisko | Nazwisko użytkownika. |
Komórka | Numer telefonu komórkowego użytkownika. Może być używany do celów logowania i rejestracji. |
Poczta e-mail | E-mail użytkownika. Może być używany do celów logowania i rejestracji. |
Hash hasła | Skrót hasła wygenerowany przez odpowiedni algorytm. Musimy unikać przechowywania zwykłych lub zaszyfrowanych haseł. |
Zarejestrowano w | Ta kolumna może być użyta do obliczenia życia użytkownika z aplikacją. |
Ostatnie logowanie | Może być używany do identyfikacji ostatniego logowania użytkownika. |
Wprowadzenie | Krótkie wprowadzenie Użytkownika. |
Profil | Szczegóły użytkownika. |
Tabela użytkownika z odpowiednimi ograniczeniami jest pokazana poniżej.
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) );
Tabela zadań
W tej sekcji zaprojektujemy Tabelę zadań do przechowywania zadań. Poniżej znajduje się opis wszystkich kolumn tabeli zadań.
Identyfikator | Unikalny identyfikator do identyfikacji zadania. |
Identyfikator użytkownika | Identyfikator użytkownika do identyfikacji odpowiedniego użytkownika. |
Utworzone przez | Identyfikator użytkownika identyfikujący użytkownika, który dodał zadanie. |
Zaktualizowane przez | Identyfikator użytkownika identyfikujący użytkownika, który zaktualizował zadanie. |
Tytuł | Tytuł zadania. |
Opis | Opis zadania. |
Stan | Stan zadania może być Nowe, W toku lub Ukończone. |
Godziny | Łączna liczba godzin spędzonych przez Zadanie. Może być wypełniany ręcznie lub aktualizowany po zakończeniu aktywności. |
Utworzono w | Przechowuje datę i godzinę utworzenia zadania. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji zadania. |
Planowana data rozpoczęcia | Przechowuje datę i godzinę rozpoczęcia zadania. |
Planowana data zakończenia | Przechowuje datę i godzinę, o której planowane jest zakończenie zadania. |
Rzeczywista data rozpoczęcia | Przechowuje rzeczywistą datę i godzinę rozpoczęcia zadania. |
Rzeczywista data zakończenia | Przechowuje rzeczywistą datę i godzinę zakończenia zadania. |
Treść | Kolumna używana do przechowywania szczegółów zadania. |
Używa statusu kolumny do śledzenia statusu zadania. Status może być Nowy, W toku lub Ukończony. Ponadto użytkownik może ręcznie wypełnić godziny w przypadku, gdy dla zadania nie zaplanowano żadnej czynności. Zadanie może również wywodzić swoje rzeczywiste godziny z powiązanych z nim czynności. Tabela zadań z odpowiednimi ograniczeniami jest pokazana poniżej.
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 zadania
Metatabela zadań może służyć do przechowywania dodatkowych informacji o zadaniach. Poniżej znajduje się opis wszystkich kolumn metatabeli zadań.
Identyfikator | Unikalny identyfikator do identyfikacji meta zadania. |
Identyfikator zadania | Identyfikator zadania do identyfikacji zadania nadrzędnego. |
Klucz | Klucz identyfikujący meta. |
Treść | Kolumna używana do przechowywania metadanych zadania. |
Metatabela zadań z odpowiednimi ograniczeniami jest pokazana poniżej.
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;
Tabela tagów i tabela tagów zadań
W tej sekcji zaprojektujemy Tabelę tagów i Tabela tagów zadań do przechowywania tagów zadań i ich mapowań. Poniżej znajduje się opis wszystkich kolumn tabeli tagów.
Identyfikator | Unikalny identyfikator do identyfikacji tagu. |
Tytuł | Tytuł tagu. |
Ślimak | Uruchomienie tagu do utworzenia adresu URL. |
Tabela tagów z odpowiednimi ograniczeniami jest pokazana poniżej.
CREATE TABLE `task_manager`.`tag` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`));
Poniżej znajduje się opis wszystkich kolumn tabeli tagów zadań.
Identyfikator zadania | Identyfikator zadania do identyfikacji zadania. |
Identyfikator tagu | Identyfikator tagu do identyfikacji tagu. |
Tabela tagów zadań z odpowiednimi ograniczeniami jest pokazana poniżej.
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);
Tabela aktywności
W tej sekcji zaprojektujemy Tabelę aktywności do przechowywania czynności zadania wymaganych do wykonania zadania. Poniżej znajduje się opis wszystkich kolumn tabeli aktywności.
Identyfikator | Unikalny identyfikator do identyfikacji aktywności. |
Identyfikator użytkownika | Identyfikator użytkownika do identyfikacji odpowiedniego użytkownika. |
Identyfikator zadania | Identyfikator zadania do identyfikacji odpowiedniego zadania. |
Utworzone przez | Identyfikator użytkownika identyfikujący użytkownika, który dodał zadanie. |
Zaktualizowane przez | Identyfikator użytkownika identyfikujący użytkownika, który zaktualizował zadanie. |
Tytuł | Tytuł zadania. |
Opis | Opis zadania. |
Stan | Stan działania może być Nowy, W toku lub Ukończony. |
Godziny | Łączna liczba godzin spędzonych przez działanie. Odpowiednie godziny zadań można zaktualizować po zakończeniu działania. |
Utworzono w | Przechowuje datę i godzinę utworzenia aktywności. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji aktywności. |
Planowana data rozpoczęcia | Przechowuje datę i godzinę rozpoczęcia aktywności. |
Planowana data zakończenia | Przechowuje datę i godzinę, o której planowane jest zakończenie działania. |
Rzeczywista data rozpoczęcia | Przechowuje rzeczywistą datę i godzinę rozpoczęcia działalności. |
Rzeczywista data zakończenia | Przechowuje rzeczywistą datę i godzinę zakończenia aktywności. |
Treść | Kolumna używana do przechowywania szczegółów aktywności. |
Wykorzystuje status kolumny do śledzenia statusu aktywności. Status może być Nowy, W toku lub Ukończony. Ponadto użytkownik może ręcznie wpisać godziny aktywności. Zadanie może wywodzić swoje rzeczywiste godziny z powiązanych z nim czynności. Tabela aktywności z odpowiednimi ograniczeniami jest pokazana poniżej.
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;
Tabela komentarzy
W tej sekcji zaprojektujemy Tabelę komentarzy do przechowywania komentarzy do zadań i czynności. Poniżej znajduje się opis wszystkich kolumn tabeli komentarzy.
Identyfikator | Unikalny identyfikator do identyfikacji recenzji produktu. |
Identyfikator zadania | Identyfikator zadania do identyfikacji zadania nadrzędnego. |
Identyfikator aktywności | Identyfikator aktywności do identyfikacji aktywności nadrzędnej. |
Tytuł | Tytuł recenzji. |
Utworzono w | Przechowuje datę i godzinę utworzenia komentarza. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji komentarza. |
Treść | Kolumna używana do przechowywania szczegółów komentarza. |
Tabela komentarzy z odpowiednimi ograniczeniami jest pokazana poniżej.
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;
Podsumowanie
W tym samouczku omówiliśmy projekt bazy danych aplikacji do zarządzania zadaniami do zarządzania zadaniami i działaniami użytkowników aplikacji. Zapewnił również projekt bazy danych do zarządzania komentarzami do zadań i działań.
Możesz przesłać swoje uwagi, aby dołączyć do dyskusji. Możesz być również zainteresowany zaprojektowaniem bazy danych powiadomień, wydarzenia kalendarza i przypomnienia. Pełny schemat bazy danych jest również dostępny na GitHub.