sql >> Databasteknik >  >> RDS >> Mysql

Guide till designdatabas för kalenderhändelse och påminnelse i MySQL

Denna handledning innehåller de fullständiga stegen för att utforma ett databasschema för kalenderhändelser och påminnelsesystem för att hantera användarnas kalenderhändelser och även lagra påminnelserna. Den kan förbättras ytterligare och användas för att hantera händelser och påminnelser för andra enheter förutom systemanvändaren.

Entity Relationship Diagram eller visuell databasdesign visas nedan.

Kalenderhändelser och påminnelsedatabasdesign

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, Bloggdatabas i MySQL, Frågesportsdatabas i MySQL, Enkät- och undersökningsdatabas i MySQL, Online Shopping Cart Database i MySQL och Lär dig grundläggande SQL-frågor i MySQL.

Kalenderdatabas

Det allra första steget är att skapa kalenderdatabasen. Den kan skapas med hjälp av frågan som visas nedan.

CREATE SCHEMA `calendar` 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 händelser och påminnelser. Nedan nämns beskrivningen av alla kolumner i användartabellen.

Id Det unika ID:t för att identifiera användaren.
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 Den korta introduktionen av användaren.
Profil Användarinformation.

Användartabellen med lämpliga begränsningar visas nedan.

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ändelsetabell

I det här avsnittet kommer vi att utforma Händelsetabellen för att lagra användarhändelserna och händelserna som utlösts av applikationen. Nedan nämns beskrivningen av alla kolumner i händelsetabellen.

Id Det unika ID:t för att identifiera händelsen.
Användar-ID Användar-ID för att identifiera motsvarande användare.
Käll-ID Käll-id för att identifiera motsvarande enhet.
Källtyp Källtypen för att särskilja motsvarande enhet bland andra enheter.
Titel Händelsens titel.
Beskrivning Händelsebeskrivningen för att lagra händelsens viktigaste höjdpunkter.
Typ Typen för att skilja mellan de olika händelsetyperna.
URL Webbadressen för att omdirigera användaren till en specifik länk som är kopplad till händelsen.
Aktiv Flagga för att identifiera om händelsen är aktiv och kvalificerad för att visas i kalendern.
System Flagga för att identifiera om händelsen genereras av applikationen. Ansökningshändelserna kommer alltid att vara berättigade att visas i kalendern.
Antal påminnelser Det maximala antalet påminnelser som kan utlösas för händelsen.
Påminnelseintervall Påminnelseintervallet.
Påminnelseenhet Påminnelseenheten för att identifiera påminnelseintervallet i minuter, timmar eller dagar.
Skapat vid Den lagrar datum och tid då händelsen skapas.
Uppdaterad kl. Den lagrar datum och tid då händelsen uppdateras.
Schemalagt vid Den lagrar datum och tid i kalendern.
Utlösts vid Den lagrar datum och tid då händelsen utlöstes.
Innehåll Kolumnen som används för att lagra händelseinnehållet.

Den använder kolumnen Aktiv för att identifiera om den användargenererade händelsen kan visas i kalendern. Systemet flaggan kan användas för att markera applikationsgenererade händelser. De programgenererade händelserna kan alltid visas i kalendern. Kolumnerna Käll-ID och Källtyp kan användas för att identifiera andra tabeller eller enheter som är associerade med händelsen. Kolumnen Utlöst vid lagrar datum och tid då händelsen senast utlöstes. Händelsetabellen med lämpliga begränsningar visas nedan.

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

Händelsemalltabell

I det här avsnittet kommer vi att utforma Händelsemalltabellen används för att generera händelseinnehållet. Applikationen kan vidare använda lämpligt mallsystem för att analysera mallen för att generera händelseinnehållet. Nedan nämns beskrivningen av alla kolumner i händelsemallstabellen.

Id Det unika ID:t för att identifiera händelsemallen.
Titel Malltiteln.
Beskrivning Mallbeskrivningen.
Typ Typen för att klassificera mallarna.
Källtyp Källtypen för att klassificera mallarna enligt källtypen.
Skapat vid Den lagrar datum och tid då mallen skapades.
Uppdaterad kl. Den lagrar datum och tid då mallen uppdaterades.
Innehåll Kolumnen som används för att lagra mallens innehåll.

Händelsemalltabellen med lämpliga begränsningar är som visas nedan.

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

Påminnelsetabell

Vi behöver också en tabell för att lagra påminnelser som utlöses av aktiva händelser eller systemhändelser. Det här avsnittet innehåller tabellen och kolumnerna som krävs för att hantera påminnelserna. Nedan nämns beskrivningen av alla kolumner i Påminnelsetabellen.

Id Det unika ID:t för att identifiera påminnelsen.
Händelse-ID Händelse-id för att identifiera händelsen som är kopplad till påminnelsen.
Användar-ID Användar-ID för att identifiera användaren som är kopplad till påminnelsen.
Läs Flaggan för att markera påminnelsen som läst/oläst.
papperskorgen Flaggan för att markera påminnelsen som papperskorgen.
Skapat vid Den lagrar datum och tid då påminnelsen skapas.
Uppdaterad kl. Den lagrar datum och tid då påminnelsen uppdateras.
Innehåll Påminnelsemeddelandet.

Påminnelsetabellen med lämpliga begränsningar visas nedan.

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;

Förbättringar

Vi kan också hantera grupphändelser med samma databasschema. Det kan göras genom att lägga till gruppflaggan i händelsetabellen och en ny tabell krävs för att hantera deltagarna i gruppevenemanget.

Sammanfattning

I den här handledningen har vi diskuterat databasdesignen för ett kalendersystem för att lagra användarhändelser och påminnelser. Det gav också databasdesignen för att hantera användarhändelser som utlösts av systemen eller applikationen.

Du kan skicka in dina kommentarer för att delta i diskussionen. Du kanske också är intresserad av att designa databasen med applikationerna Blog och Poll &Survey. Det fullständiga databasschemat finns också tillgängligt på GitHub.


  1. Hur förhindrar man radering av den första raden i tabellen (PostgreSQL)?

  2. Hur man konverterar PostgreSQL 9.4:s jsonb-typ till flytande

  3. Hur SQL Server DIFFERENCE()-funktionen fungerar

  4. Proceduren förväntar sig parameter som inte tillhandahölls