Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przewodnik po projektowaniu bazy danych dla Menedżera zadań w MySQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać czas z ciągu znaków w MySQL?

  2. Przykłady UTC_TIMESTAMP() – MySQL

  3. DODAJ KOLUMNĘ MySQL

  4. Jaki jest odpowiednik LEN() w MySQL?

  5. CURRENT_DATE Przykłady – MySQL