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

Guide til designdatabase til kalenderbegivenhed og påmindelse i MySQL

Denne vejledning indeholder de komplette trin til at designe et databaseskema for kalenderbegivenheds- og påmindelsessystemet til at administrere brugernes kalenderbegivenheder og også gemme påmindelserne. Den kan forbedres yderligere og bruges til at administrere begivenheder og påmindelser for andre enheder bortset fra systembrugeren.

Entity Relationship Diagram eller visuelle databasedesign er vist nedenfor.

Kalenderbegivenheds- og påmindelsesdatabasedesign

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, Blogdatabase i MySQL, Quiz-database i MySQL, afstemnings- og undersøgelsesdatabase i MySQL, Online-indkøbskurvdatabase i MySQL og lær grundlæggende SQL-forespørgsler i MySQL.

Kalenderdatabase

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

CREATE SCHEMA `calendar` 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 begivenheder og påmindelser. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i brugertabellen.

Id Det unikke id til at identificere brugeren.
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 Den korte introduktion af brugeren.
Profil Brugeroplysninger.

Brugertabellen med de relevante begrænsninger er vist nedenfor.

CREATE TABLE `calendar`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`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) );

Hændelsestabel

I dette afsnit vil vi designe Begivenhedstabellen at gemme brugerhændelser og hændelser udløst af applikationen. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i hændelsestabellen.

Id Det unikke id til at identificere begivenheden.
Bruger-id Bruger-id'et til at identificere den tilsvarende bruger.
Kilde-id Kilde-id'et til at identificere den tilsvarende enhed.
Kildetype Kildetypen til at skelne den tilsvarende enhed blandt andre enheder.
Titel Begivenhedens titel.
Beskrivelse Begivenhedsbeskrivelsen til at gemme begivenhedens vigtigste højdepunkter.
Type Typen til at skelne mellem de forskellige hændelsestyper.
URL URL'en til at omdirigere brugeren til et specifikt link forbundet med begivenheden.
Aktiv Flag for at identificere, om begivenheden er aktiv og kvalificeret til at blive vist i kalenderen.
System Flag for at identificere, om hændelsen er genereret af applikationen. Ansøgningsbegivenhederne vil altid være kvalificerede til at blive vist i kalenderen.
Tæller påmindelser Det maksimale antal påmindelser, der kan udløses for begivenheden.
Påmindelsesinterval Påmindelsesintervallet.
Påmindelsesenhed Påmindelsesenheden til at identificere påmindelsesintervallet i minutter, timer eller dage.
Oprettet på Den gemmer datoen og klokkeslættet, hvor begivenheden oprettes.
Opdateret kl. Den gemmer datoen og klokkeslættet, hvor begivenheden opdateres.
Planlagt kl. Den gemmer dato og klokkeslæt i kalenderen.
Udløst ved Den gemmer datoen og klokkeslættet, hvor begivenheden blev udløst.
Indhold Kolonnen, der bruges til at gemme begivenhedsindholdet.

Den bruger kolonnen Aktiv for at identificere, om den brugergenererede begivenhed kan vises i kalenderen. Systemet flag kan bruges til at markere de applikationsgenererede hændelser. De applikationsgenererede begivenheder kan altid vises i kalenderen. Kolonnerne Kilde-id og Kildetype kan bruges til at identificere de andre tabeller eller enheder, der er knyttet til begivenheden. Kolonnen Udløst ved gemmer datoen og klokkeslættet, hvor begivenheden sidst blev udløst. Hændelsestabellen med de relevante begrænsninger er vist nedenfor.

CREATE TABLE `calendar`.`event` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`sourceId` BIGINT,
`sourceType` VARCHAR(50) NULL DEFAULT NULL,
`title` VARCHAR(1024) NOT NULL,
`descritpion` VARCHAR(2048) NULL DEFAULT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`url` VARCHAR(1024) NULL DEFAULT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`system` TINYINT(1) NOT NULL DEFAULT 0,
`reminderCount` SMALLINT(6) NOT NULL DEFAULT 0,
`reminderInterval` SMALLINT(6) NOT NULL DEFAULT 0,
`reminderUnit` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`scheduledAt` DATETIME NULL DEFAULT NULL,
`triggeredAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_event_user` (`userId` ASC),
CONSTRAINT `fk_event_user`
FOREIGN KEY (`userId`)
REFERENCES `calendar`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Tabel med begivenhedsskabeloner

I dette afsnit vil vi designe Begivenhedsskabelontabellen bruges til at generere begivenhedsindholdet. Applikationen kan yderligere bruge det relevante skabelonsystem til at parse skabelonen for at generere begivenhedsindholdet. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i hændelsesskabelontabellen.

Id Det unikke id til at identificere begivenhedsskabelonen.
Titel Skabelonens titel.
Beskrivelse Skabelonbeskrivelsen.
Type Typen til at klassificere skabelonerne.
Kildetype Kildetypen til at klassificere skabelonerne i henhold til kildetypen.
Oprettet på Den gemmer datoen og tidspunktet, hvor skabelonen blev oprettet.
Opdateret kl. Den gemmer datoen og klokkeslættet, hvor skabelonen blev opdateret.
Indhold Kolonnen, der bruges til at gemme skabelonindholdet.

Hændelsesskabelontabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `calendar`.`event_template` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`description` VARCHAR(2048) NULL DEFAULT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`sourceType` VARCHAR(50) NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`) );

Tabel med påmindelser

Vi har også brug for en tabel til at gemme de påmindelser, der udløses af aktive eller systemhændelser. Dette afsnit indeholder tabellen og kolonnerne, der er nødvendige for at administrere påmindelserne. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i rykkertabellen.

Id Det unikke id til at identificere påmindelsen.
Begivenheds-id Begivenheds-id'et til at identificere den begivenhed, der er knyttet til påmindelsen.
Bruger-id Bruger-id'et til at identificere den bruger, der er knyttet til påmindelsen.
Læs Flaget til at markere påmindelsen som læst/ulæst.
Papirkurv Flaget til at markere påmindelsen som papirkurv.
Oprettet på Den gemmer datoen og klokkeslættet, hvorpå påmindelsen oprettes.
Opdateret kl. Den gemmer datoen og klokkeslættet, hvorpå påmindelsen opdateres.
Indhold Påmindelsen.

Påmindelsestabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `calendar`.`reminder` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`eventId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`read` TINYINT(1) NOT NULL DEFAULT 1,
`trash` TINYINT(1) NOT NULL DEFAULT 1,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_reminder_event` (`eventId` ASC),
CONSTRAINT `fk_reminder_event`
FOREIGN KEY (`eventId`)
REFERENCES `calendar`.`event` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `calendar`.`reminder`
ADD INDEX `idx_reminder_user` (`userId` ASC);
ALTER TABLE `calendar`.`reminder`
ADD CONSTRAINT `fk_reminder_user`
FOREIGN KEY (`userId`)
REFERENCES `calendar`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Forbedringer

Vi kan også administrere gruppebegivenheder ved hjælp af det samme databaseskema. Det kan gøres ved at tilføje gruppeflaget til begivenhedstabellen, og der kræves en ny tabel for at administrere deltagerne i gruppebegivenheden.

Oversigt

I denne øvelse har vi diskuteret databasedesignet af et kalendersystem til at gemme brugerbegivenheder og påmindelser. Det gav også databasedesignet til at styre brugerhændelser udløst af systemerne eller applikationen.

Du kan indsende dine kommentarer for at deltage i diskussionen. Du kan også være interesseret i at designe databasen med Blog- og Poll &Survey-applikationerne. Det komplette databaseskema er også tilgængeligt på GitHub.


  1. Hvad betyder PÅ [PRIMÆR]?

  2. Automatisk sletning af fastlåste processer i MS SQL Server

  3. Sådan vises en dato i tysk format i SQL Server (T-SQL)

  4. SQL Server CTE og rekursion eksempel