Denna handledning innehåller de fullständiga stegen för att designa ett databasschema för Aktivitetshanteraren för att hantera uppgifter, aktiviteter och kommentarer från applikationsanvändarna. Task Manager-applikationen byggd med denna databasdesign kan användas för att lagra de uppgifter som är associerade med användarna. Samma applikation kan användas för att hantera aktivitetsaktiviteter och kommentarer eller anteckningar.
Entity Relationship Diagram eller visuell databasdesign visas nedan.
Task Management Databas Design
Du kan också besöka de populära handledningarna inklusive Hur man installerar MySQL 8 på Ubuntu 20.04 LTS, Hur man installerar MySQL 8 på Windows, Hur man installerar MySQL Workbench på Ubuntu, Hur man installerar MySQL 8 med Workbench på Windows 10, RBAC Database i MySql, Aviseringsdatabas i MySQL, kalenderhändelse- och påminnelsedatabas i MySQL, bloggdatabas i MySQL, frågesportdatabas i MySQL, omröstnings- och undersökningsdatabas i MySQL, kundvagnsdatabas online i MySQL, inventeringsdatabas i MySQL och lär dig grundläggande SQLQL-frågor.
Databas för Aktivitetshanteraren
Det allra första steget är att skapa Task Manager-databasen. Den kan skapas med hjälp av frågan som visas nedan.
CREATE SCHEMA `task_manager` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Jag har använt teckenuppsättningen utf8mb4 för att stödja ett stort antal tecken.
Användartabell
I det här avsnittet kommer vi att utforma användartabellen för att lagra användarinformation. Användare kan hantera sina egna profiler. Användarna kan också använda applikationen för att hantera sina egna uppgifter och aktiviteter. Nedan nämns beskrivningen av alla kolumner i användartabellen.
Id | Det unika ID:t för att identifiera användaren. |
Roll-ID | Användarens roll. Det kan vara Admin eller User. |
Förnamn | Användarens förnamn. |
Mellannamn | Användarens mellannamn. |
Efternamn | Användarens efternamn. |
Mobil | Användarens mobilnummer. Den kan användas för inloggning och registreringsändamål. |
E-post | Användarens e-postadress. Den kan användas för inloggning och registreringsändamål. |
Lösenordshash | Lösenords-hash som genereras av lämplig algoritm. Vi måste undvika att lagra vanliga eller krypterade lösenord. |
Registrerad på | Denna kolumn kan användas för att beräkna användarens livslängd med programmet. |
Senaste inloggning | Den kan användas för att identifiera användarens senaste inloggning. |
Intro | En kort introduktion av användaren. |
Profil | Användarinformation. |
Användartabellen med lämpliga begränsningar visas nedan.
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) );
Uppgiftstabell
I det här avsnittet kommer vi att utforma uppgiftstabellen att lagra uppgifterna. Nedan nämns beskrivningen av alla kolumner i uppgiftstabellen.
Id | Det unika ID:t för att identifiera uppgiften. |
Användar-ID | Användar-ID för att identifiera motsvarande användare. |
Skapad av | Användar-id för att identifiera användaren som lade till uppgiften. |
Uppdaterad av | Användar-ID för att identifiera användaren som uppdaterade uppgiften. |
Titel | Uppgiftens titel. |
Beskrivning | Beskrivningen av uppgiften. |
Status | Status för uppgiften kan vara Ny, Pågående eller Slutförd. |
Timmar | Det totala antalet timmar som förbrukas av uppgiften. Den kan antingen fyllas i manuellt eller uppdateras när aktiviteten är klar. |
Skapat vid | Den lagrar datum och tid då uppgiften skapas. |
Uppdaterad kl. | Den lagrar datum och tid då uppgiften uppdateras. |
Planerat startdatum | Den lagrar datum och tid då uppgiften är planerad att starta. |
Planerat slutdatum | Den lagrar datum och tid då uppgiften är planerad att avslutas. |
Faktiskt startdatum | Den lagrar det faktiska datumet och tiden då uppgiften startade. |
Faktiskt slutdatum | Den lagrar det faktiska datumet och tiden då uppgiften slutfördes. |
Innehåll | Kolumnen som används för att lagra uppgiftsinformationen. |
Den använder kolumnstatus för att spåra statusen för uppgiften. Statusen kan vara antingen Ny, Pågående eller Slutförd. Användaren kan också manuellt fylla timmarna om ingen aktivitet är planerad för uppgiften. Uppgiften kan också hämta sina faktiska timmar från aktiviteterna som är kopplade till den. Uppgiftstabellen med lämpliga begränsningar är som visas nedan.
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
Uppgiftsmetatabellen kan användas för att lagra ytterligare information om uppgifter. Nedan nämns beskrivningen av alla kolumner i Task Meta Table.
Id | Det unika ID:t för att identifiera uppgiftens meta. |
Uppgifts-ID | Uppgifts-id för att identifiera den överordnade uppgiften. |
Nyckel | Nyckeln som identifierar meta. |
Innehåll | Kolumnen som används för att lagra uppgiftens metadata. |
Uppgiftsmetatabellen med lämpliga begränsningar är som visas nedan.
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;
Taggtabell och Task Taggtabell
I det här avsnittet kommer vi att utforma Taggtabellen och Task Tag Table för att lagra uppgiftstaggarna och deras mappningar. Nedan nämns beskrivningen av alla kolumner i taggtabellen.
Id | Det unika ID:t för att identifiera taggen. |
Titel | Taggtiteln. |
Snigel | Taggsnäckan för att bilda webbadressen. |
Taggtabellen med lämpliga begränsningar visas nedan.
CREATE TABLE `task_manager`.`tag` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`));
Nedan nämns beskrivningen av alla kolumner i Task Tag-tabellen.
Uppgifts-ID | Uppgifts-id för att identifiera uppgiften. |
Tagg-ID | Tagg-id för att identifiera taggen. |
Task Tag-tabellen med lämpliga begränsningar visas nedan.
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);
Aktivitetstabell
I det här avsnittet kommer vi att utforma Aktivitetstabellen för att lagra de aktivitetsaktiviteter som krävs för att slutföra uppgiften. Nedan nämns beskrivningen av alla kolumner i aktivitetstabellen.
Id | Det unika ID:t för att identifiera aktiviteten. |
Användar-ID | Användar-ID för att identifiera motsvarande användare. |
Uppgifts-ID | Uppgifts-id för att identifiera motsvarande uppgift. |
Skapad av | Användar-id för att identifiera användaren som lade till uppgiften. |
Uppdaterad av | Användar-ID för att identifiera användaren som uppdaterade uppgiften. |
Titel | Uppgiftens titel. |
Beskrivning | Beskrivningen av uppgiften. |
Status | Aktivitetens status kan vara Ny, Pågående eller Slutförd. |
Timmar | Det totala antalet timmar som förbrukas av aktiviteten. Motsvarande arbetstimmar kan uppdateras när aktiviteten är slutförd. |
Skapat vid | Den lagrar datum och tid då aktiviteten skapas. |
Uppdaterad kl. | Den lagrar datum och tid då aktiviteten uppdateras. |
Planerat startdatum | Den lagrar datum och tid då aktiviteten är planerad att starta. |
Planerat slutdatum | Den lagrar datum och tid då aktiviteten är planerad att avslutas. |
Faktiskt startdatum | Den lagrar det faktiska datumet och tiden då aktiviteten startade. |
Faktiskt slutdatum | Den lagrar det faktiska datumet och tiden då aktiviteten avslutades. |
Innehåll | Kolumnen som används för att lagra aktivitetsinformationen. |
Den använder kolumnstatusen för att spåra aktivitetens status. Statusen kan vara antingen Ny, Pågående eller Slutförd. Dessutom kan användaren manuellt fylla i aktivitetstimmarna. Uppgiften kan härleda sina faktiska timmar från aktiviteterna som är kopplade till den. Aktivitetstabellen med lämpliga begränsningar är som visas nedan.
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;
Kommentartabell
I det här avsnittet kommer vi att utforma kommentartabellen för att lagra uppgiften och aktivitetskommentarerna. Nedan nämns beskrivningen av alla kolumner i kommentarstabellen.
Id | Det unika ID:t för att identifiera produktrecensionen. |
Uppgifts-ID | Uppgifts-id för att identifiera den överordnade uppgiften. |
Aktivitets-ID | Aktivitets-id för att identifiera den överordnade aktiviteten. |
Titel | Recensionstiteln. |
Skapat vid | Den lagrar datum och tid då kommentaren skapas. |
Uppdaterad kl. | Den lagrar datum och tid då kommentaren uppdateras. |
Innehåll | Kolumnen som används för att lagra kommentarsinformationen. |
Kommentarstabellen med lämpliga begränsningar är som visas nedan.
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;
Sammanfattning
I den här handledningen har vi diskuterat databasdesignen för en Task Management-applikation för att hantera uppgifterna och aktiviteterna för programanvändarna. Det gav också databasdesignen för att hantera kommentarerna för uppgifterna och aktiviteterna.
Du kan skicka in dina kommentarer för att delta i diskussionen. Du kanske också är intresserad av att designa databasen för meddelanden, kalenderhändelser och påminnelser. Det fullständiga databasschemat finns också tillgängligt på GitHub.