sql >> Database >  >> RDS >> Mysql

Gids voor het ontwerpen van een database voor kalendergebeurtenissen en herinneringen in MySQL

Deze tutorial biedt de volledige stappen voor het ontwerpen van een databaseschema van het kalendergebeurtenis- en herinneringssysteem om de kalendergebeurtenissen van de gebruikers te beheren en ook de herinneringen op te slaan. Het kan verder worden verbeterd en gebruikt om de gebeurtenissen en herinneringen van andere entiteiten dan de systeemgebruiker te beheren.

Het entiteitsrelatiediagram of visueel databaseontwerp wordt hieronder weergegeven.

Database-ontwerp voor kalendergebeurtenissen en herinneringen

U kunt ook de populaire tutorials bezoeken, waaronder MySQL 8 installeren op Ubuntu 20.04 LTS, MySQL 8 installeren op Windows, MySQL Workbench installeren op Ubuntu, MySQL 8 installeren met Workbench op Windows 10, RBAC Database in MySql, Blogdatabase in MySql, quizdatabase in MySQL, enquête- en enquêtedatabase in MySQL, online winkelwagendatabase in MySQL en leer elementaire SQL-query's in MySQL.

Agenda-database

De allereerste stap is het maken van de agendadatabase. Het kan worden gemaakt met behulp van de onderstaande query.

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

Ik heb de tekenset utf8mb4 . gebruikt om een ​​breed scala aan karakters te ondersteunen.

Gebruikerstabel

In deze sectie zullen we de Gebruikerstabel . ontwerpen om gebruikersinformatie op te slaan. Gebruikers kunnen hun eigen evenementen en herinneringen beheren. Hieronder staat de beschrijving van alle kolommen van de gebruikerstabel.

Id Het unieke ID om de gebruiker te identificeren.
Voornaam De voornaam van de gebruiker.
Middelste naam De middelste naam van de gebruiker.
Achternaam De achternaam van de gebruiker.
Mobiel Het mobiele nummer van de gebruiker. Het kan worden gebruikt voor aanmeldings- en registratiedoeleinden.
E-mail Het e-mailadres van de gebruiker. Het kan worden gebruikt voor aanmeldings- en registratiedoeleinden.
Wachtwoordhash De wachtwoord-hash gegenereerd door het juiste algoritme. We moeten vermijden om gewone of versleutelde wachtwoorden op te slaan.
Geregistreerd bij Deze kolom kan worden gebruikt om de levensduur van de gebruiker met de applicatie te berekenen.
Laatste aanmelding Het kan worden gebruikt om de laatste login van de gebruiker te identificeren.
Inleiding De korte introductie van de gebruiker.
Profiel Gebruikersgegevens.

De gebruikerstabel met de juiste beperkingen wordt hieronder weergegeven.

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

Evenemententabel

In deze sectie zullen we de Evenemententabel . ontwerpen om de gebruikersgebeurtenissen en de gebeurtenissen die door de toepassing worden geactiveerd, op te slaan. Hieronder staat de beschrijving van alle kolommen van de Event Table.

Id De unieke id om de gebeurtenis te identificeren.
Gebruikers-ID De gebruikers-ID om de corresponderende gebruiker te identificeren.
Bron-ID De bron-ID om de corresponderende entiteit te identificeren.
Brontype Het brontype om de corresponderende entiteit te onderscheiden van andere entiteiten.
Titel De titel van het evenement.
Beschrijving De evenementbeschrijving om de belangrijkste hoogtepunten van het evenement op te slaan.
Type Het type om onderscheid te maken tussen de verschillende gebeurtenistypes.
URL De URL om de gebruiker om te leiden naar een specifieke link die aan het evenement is gekoppeld.
Actief Vlag om aan te geven of het evenement actief is en in aanmerking komt voor weergave op de kalender.
Systeem Vlag om aan te geven of de gebeurtenis door de toepassing is gegenereerd. De toepassingsgebeurtenissen komen altijd in aanmerking voor weergave op de kalender.
Herinneringen tellen Het maximum aantal herinneringen dat kan worden geactiveerd voor de gebeurtenis.
Herinneringsinterval Het herinneringsinterval.
Herinneringseenheid De herinneringseenheid om het herinneringsinterval in minuten, uren of dagen te identificeren.
Gemaakt op Het slaat de datum en tijd op waarop het evenement is gemaakt.
Bijgewerkt om Het slaat de datum en tijd op waarop het evenement is bijgewerkt.
Gepland om Het slaat de datum en tijd op in de kalender.
Geactiveerd bij Het slaat de datum en tijd op waarop de gebeurtenis werd geactiveerd.
Inhoud De kolom die wordt gebruikt om de gebeurtenisinhoud op te slaan.

Het gebruikt de kolom Actief om te bepalen of de door de gebruiker gegenereerde gebeurtenis in de kalender kan worden weergegeven. Het Systeem flag kan worden gebruikt om de door de toepassing gegenereerde gebeurtenissen te markeren. De door de applicatie gegenereerde evenementen kunnen altijd in de kalender worden weergegeven. De kolommen Bron-ID en Brontype kan worden gebruikt om de andere tabellen of entiteiten te identificeren die aan de gebeurtenis zijn gekoppeld. De kolom Triggered At slaat de datum en tijd op waarop de gebeurtenis voor het laatst is geactiveerd. De gebeurtenistabel met de juiste beperkingen wordt hieronder weergegeven.

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 met gebeurtenissjablonen

In deze sectie zullen we de Event Template Table . ontwerpen gebruikt om de evenementinhoud te genereren. De toepassing kan verder het juiste sjabloonsysteem gebruiken om de sjabloon te ontleden om de gebeurtenisinhoud te genereren. Hieronder staat de beschrijving van alle kolommen van de Event Template Table.

Id De unieke id om de gebeurtenissjabloon te identificeren.
Titel De sjabloontitel.
Beschrijving De sjabloonbeschrijving.
Type Het type om de sjablonen te classificeren.
Brontype Het brontype om de sjablonen te classificeren volgens het brontype.
Gemaakt op Het slaat de datum en tijd op waarop de sjabloon is gemaakt.
Bijgewerkt om Het slaat de datum en tijd op waarop de sjabloon is bijgewerkt.
Inhoud De kolom die wordt gebruikt om de sjablooninhoud op te slaan.

De gebeurtenissjabloontabel met de juiste beperkingen is zoals hieronder weergegeven.

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

Herinneringstabel

We hebben ook een tabel nodig om de herinneringen op te slaan die worden geactiveerd door actieve of systeemgebeurtenissen. Dit gedeelte bevat de tabel en kolommen die nodig zijn om de herinneringen te beheren. Hieronder staat de beschrijving van alle kolommen van de Herinneringstabel.

Id Het unieke ID om de herinnering te identificeren.
Evenement-ID De gebeurtenis-ID om de gebeurtenis te identificeren die aan de herinnering is gekoppeld.
Gebruikers-ID Het gebruikers-ID om de gebruiker te identificeren die aan de herinnering is gekoppeld.
Lees De vlag om de herinnering als gelezen/ongelezen te markeren.
Prullenbak De vlag om de herinnering als prullenbak te markeren.
Gemaakt op Het slaat de datum en tijd op waarop de herinnering is gemaakt.
Bijgewerkt om Het slaat de datum en tijd op waarop de herinnering is bijgewerkt.
Inhoud Het herinneringsbericht.

De herinneringstabel met de juiste beperkingen is zoals hieronder weergegeven.

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;

Verbeteringen

We kunnen ook groepsgebeurtenissen beheren met hetzelfde databaseschema. Dit kan worden gedaan door de groepsvlag toe te voegen aan de evenemententabel en er is een nieuwe tafel vereist om de deelnemers aan het groepsevenement te beheren.

Samenvatting

In deze zelfstudie hebben we het databaseontwerp van een kalendersysteem besproken om gebruikersgebeurtenissen en herinneringen op te slaan. Het leverde ook het database-ontwerp om de gebruikersgebeurtenissen te beheren die door de systemen of applicatie werden geactiveerd.

U kunt uw opmerkingen indienen om deel te nemen aan de discussie. Mogelijk bent u ook geïnteresseerd in het ontwerpen van de database van de Blog- en Poll &Survey-applicaties. Het volledige databaseschema is ook beschikbaar op GitHub.


  1. Docker - Hoe kan de opdracht psql in de postgres-container worden uitgevoerd?

  2. Queryresultaten retourneren als een door komma's gescheiden lijst in SQL Server - STRING_AGG()

  3. SQL LIKE-voorwaarde om te controleren op integer?

  4. ORA-04021:time-out opgetreden tijdens het wachten om object te vergrendelen