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. |
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.