sql >> Database teknologi >  >> RDS >> Mysql

Guide til designdatabase til opgavehåndtering i MySQL

Denne vejledning indeholder de komplette trin til at designe et databaseskema for Task Manager til at administrere applikationsbrugeres opgaver, aktiviteter og kommentarer. Task Manager-applikationen bygget ved hjælp af dette databasedesign kan bruges til at gemme de opgaver, der er knyttet til brugerne. Den samme applikation kan bruges til at administrere opgaveaktiviteterne og kommentarer eller noter.

Entity Relationship Diagram eller visuelle databasedesign er vist nedenfor.

Task Management Database Design

Du kan også besøge de populære tutorials, herunder Sådan installeres MySQL 8 på Ubuntu 20.04 LTS, Sådan installeres MySQL 8 på Windows, Sådan installeres MySQL Workbench på Ubuntu, Sådan installeres MySQL 8 med Workbench på Windows 10, RBAC-database i MySql, Notifikationsdatabase i MySQL, kalenderbegivenheds- og påmindelsesdatabase i MySQL, blogdatabase i MySQL, quizdatabase i MySQL, afstemnings- og undersøgelsesdatabase i MySQL, onlineindkøbsvognsdatabase i MySQL, inventardatabase i MySQL, og lær grundlæggende SQLQL-forespørgsler i min.

Task Manager-database

Det allerførste trin er at oprette Task Manager-databasen. Den kan oprettes ved hjælp af forespørgslen som vist nedenfor.

CREATE SCHEMA `task_manager` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Jeg har brugt tegnsættet utf8mb4 for at understøtte en bred vifte af tegn.

Brugertabel

I dette afsnit vil vi designe Brugertabellen at gemme brugeroplysninger. Brugere kan administrere deres egne profiler. Brugerne kan også bruge applikationen til at styre deres egne opgaver og aktiviteter. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i brugertabellen.

Id Det unikke id til at identificere brugeren.
Rolle-id Brugerens rolle. Det kan være Admin eller Bruger.
Fornavn Brugerens fornavn.
Mellemnavn Brugerens mellemnavn.
Efternavn Brugerens efternavn.
Mobil Brugerens mobilnummer. Det kan bruges til login og registreringsformål.
E-mail Brugerens e-mail. Det kan bruges til login og registreringsformål.
Password Hash Adgangskodehashen genereret af den passende algoritme. Vi skal undgå at gemme almindelige eller krypterede adgangskoder.
Registreret på Denne kolonne kan bruges til at beregne levetiden for brugeren med applikationen.
Sidste login Det kan bruges til at identificere brugerens sidste login.
Introduktion En kort introduktion af brugeren.
Profil Brugeroplysninger.

Brugertabellen med de relevante begrænsninger er vist nedenfor.

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) );

Opgavetabel

I dette afsnit vil vi designe Opgavetabellen at gemme opgaverne. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i opgavetabellen.

Id Det unikke id til at identificere opgaven.
Bruger-id Bruger-id'et til at identificere den tilsvarende bruger.
Oprettet af Bruger-id'et til at identificere den bruger, der tilføjede opgaven.
Opdateret af Bruger-id'et til at identificere den bruger, der opdaterede opgaven.
Titel Opgavens titel.
Beskrivelse Beskrivelsen af ​​opgaven.
Status Opgavens status kan være Ny, Igangværende eller Udført.
Åbningstider Det samlede antal timer, der forbruges af opgaven. Den kan enten udfyldes manuelt eller opdateres, når aktiviteten er afsluttet.
Oprettet på Den gemmer datoen og tidspunktet, hvor opgaven er oprettet.
Opdateret kl. Den gemmer datoen og tidspunktet, hvor opgaven opdateres.
Planlagt startdato Den gemmer datoen og klokkeslættet, hvor opgaven er planlagt til at starte.
Planlagt slutdato Den gemmer datoen og klokkeslættet, hvor opgaven er planlagt til at slutte.
Faktisk startdato Det gemmer den faktiske dato og klokkeslæt, hvor opgaven startede.
Faktisk slutdato Det gemmer den faktiske dato og klokkeslæt, hvor opgaven blev afsluttet.
Indhold Kolonnen, der bruges til at gemme opgavedetaljerne.

Den bruger kolonnestatus til at spore status for opgaven. Status kan enten være Ny, Igangværende eller Fuldført. Brugeren kan også manuelt udfylde timerne, hvis der ikke er planlagt aktivitet for opgaven. Opgaven kan også udlede sine faktiske timer fra de aktiviteter, der er forbundet med den. Opgavetabellen med de relevante begrænsninger er som vist nedenfor.

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;

Opgavemeta

Opgavemetatabellen kan bruges til at gemme yderligere oplysninger om opgaver. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Task Meta Table.

Id Det unikke id til at identificere opgavens meta.
Opgave-id Opgave-id'et til at identificere den overordnede opgave.
Nøgle Nøglen, der identificerer metaen.
Indhold Kolonnen, der bruges til at gemme opgavens metadata.

Opgavemetatabellen med de relevante begrænsninger er som vist nedenfor.

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;

Tag-tabel og Task Tag-tabel

I dette afsnit vil vi designe Tag-tabellen og Tabel med opgavemærker til at gemme opgavemærkerne og deres tilknytninger. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i tagtabellen.

Id Det unikke id til at identificere tagget.
Titel Tag-titlen.
Snegl Tagsneglen til at danne URL'en.

Tag-tabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `task_manager`.`tag` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`));

Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Task Tag-tabellen.

Opgave-id Opgave-id'et til at identificere opgaven.
Tag-id Tag-id'et til at identificere tagget.

Task Tag-tabellen med de relevante begrænsninger er som vist nedenfor.

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);

Aktivitetstabel

I dette afsnit vil vi designe Aktivitetstabellen at gemme de opgaveaktiviteter, der kræves for at fuldføre opgaven. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i aktivitetstabellen.

Id Det unikke id til at identificere aktiviteten.
Bruger-id Bruger-id'et til at identificere den tilsvarende bruger.
Opgave-id Opgave-id'et til at identificere den tilsvarende opgave.
Oprettet af Bruger-id'et til at identificere den bruger, der tilføjede opgaven.
Opdateret af Bruger-id'et til at identificere den bruger, der opdaterede opgaven.
Titel Opgavens titel.
Beskrivelse Beskrivelsen af ​​opgaven.
Status Aktivitetens status kan være Ny, Igangværende eller Fuldført.
Åbningstider Det samlede antal timer, der forbruges af aktiviteten. De tilsvarende arbejdstimer kan opdateres ved afslutningen af ​​aktiviteten.
Oprettet på Den gemmer datoen og tidspunktet, hvor aktiviteten er oprettet.
Opdateret kl. Den gemmer datoen og klokkeslættet, hvor aktiviteten opdateres.
Planlagt startdato Den gemmer datoen og tidspunktet, hvor aktiviteten er planlagt til at starte.
Planlagt slutdato Den gemmer datoen og klokkeslættet, hvor aktiviteten er planlagt til at slutte.
Faktisk startdato Det gemmer den faktiske dato og klokkeslæt, hvor aktiviteten startede.
Faktisk slutdato Den gemmer den faktiske dato og klokkeslæt, hvor aktiviteten sluttede.
Indhold Kolonnen, der bruges til at gemme aktivitetsdetaljerne.

Den bruger kolonnestatus til at spore status for aktiviteten. Status kan enten være Ny, Igangværende eller Fuldført. Desuden kan brugeren manuelt udfylde aktivitetstimerne. Opgaven kan udlede sine faktiske timer fra de aktiviteter, der er forbundet med den. Aktivitetstabellen med de relevante begrænsninger er som vist nedenfor.

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;

Kommentartabel

I dette afsnit vil vi designe kommentartabellen for at gemme opgave- og aktivitetskommentarerne. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i kommentartabellen.

Id Det unikke id til at identificere produktanmeldelsen.
Opgave-id Opgave-id'et til at identificere den overordnede opgave.
Aktivitets-id Aktivitets-id'et til at identificere den overordnede aktivitet.
Titel Anmeldelsestitlen.
Oprettet på Det gemmer datoen og klokkeslættet, hvor kommentaren er oprettet.
Opdateret kl. Den gemmer datoen og klokkeslættet, hvor kommentaren opdateres.
Indhold Kolonnen, der bruges til at gemme kommentardetaljerne.

Kommentartabellen med de relevante begrænsninger er som vist nedenfor.

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;

Oversigt

I denne øvelse har vi diskuteret databasedesignet af en Task Management-applikation til at styre applikationsbrugernes opgaver og aktiviteter. Det gav også databasedesignet til at administrere kommentarerne til opgaverne og aktiviteterne.

Du kan indsende dine kommentarer for at deltage i diskussionen. Du kan også være interesseret i at designe databasen med meddelelser, kalenderbegivenheder og påmindelse. Det komplette databaseskema er også tilgængeligt på GitHub.


  1. Sådan indstilles tegnsæt og sortering af en tabel i MySQL

  2. WEEKDAY() Eksempler – MySQL

  3. MySQL TILFØJ KOLONNE

  4. Opnå MySQL Failover &Failback på Google Cloud Platform (GCP)