Dieses Tutorial enthält die vollständigen Schritte zum Entwerfen eines Datenbankschemas des Kalenderereignis- und Erinnerungssystems zum Verwalten der Kalenderereignisse der Benutzer und zum Speichern der Erinnerungen. Es kann weiter verbessert und verwendet werden, um die Ereignisse und Erinnerungen anderer Entitäten außer dem Systembenutzer zu verwalten.
Das Entity-Relationship-Diagramm oder visuelle Datenbankdesign ist unten dargestellt.
Design der Kalenderereignis- und Erinnerungsdatenbank
Sie können auch die beliebten Tutorials besuchen, darunter So installieren Sie MySQL 8 unter Ubuntu 20.04 LTS, So installieren Sie MySQL 8 unter Windows, So installieren Sie MySQL Workbench unter Ubuntu, So installieren Sie MySQL 8 mit Workbench unter Windows 10, RBAC-Datenbank in MySql, Blog-Datenbank in MySQL, Quiz-Datenbank in MySQL, Datenbank für Umfragen und Umfragen in MySQL, Online-Warenkorb-Datenbank in MySQL und Lernen Sie grundlegende SQL-Abfragen in MySQL.
Kalenderdatenbank
Der allererste Schritt besteht darin, die Kalenderdatenbank zu erstellen. Es kann mit der unten gezeigten Abfrage erstellt werden.
CREATE SCHEMA `calendar` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ich habe den Zeichensatz utf8mb4 verwendet um eine Vielzahl von Zeichen zu unterstützen.
Benutzertabelle
In diesem Abschnitt entwerfen wir die Benutzertabelle Benutzerinformationen zu speichern. Benutzer können ihre eigenen Ereignisse und Erinnerungen verwalten. Nachfolgend finden Sie die Beschreibung aller Spalten der Benutzertabelle.
ID | Die eindeutige ID zur Identifizierung des Benutzers. |
Vorname | Der Vorname des Benutzers. |
Zweiter Vorname | Der zweite Vorname des Benutzers. |
Nachname | Der Nachname des Benutzers. |
Mobil | Die Mobiltelefonnummer des Benutzers. Es kann für Anmelde- und Registrierungszwecke verwendet werden. |
Die E-Mail des Benutzers. Es kann für Anmelde- und Registrierungszwecke verwendet werden. | |
Passwort-Hash | Der vom entsprechenden Algorithmus generierte Passwort-Hash. Wir müssen vermeiden, einfache oder verschlüsselte Passwörter zu speichern. |
Registriert unter | Diese Spalte kann verwendet werden, um die Lebensdauer des Benutzers mit der Anwendung zu berechnen. |
Letzte Anmeldung | Es kann verwendet werden, um die letzte Anmeldung des Benutzers zu identifizieren. |
Einleitung | Die kurze Einführung des Benutzers. |
Profil | Benutzerdetails. |
Die Benutzertabelle mit den entsprechenden Einschränkungen wird unten angezeigt.
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) );
Ereignistabelle
In diesem Abschnitt entwerfen wir die Ereignistabelle um die Benutzerereignisse und die von der Anwendung ausgelösten Ereignisse zu speichern. Unten erwähnt ist die Beschreibung aller Spalten der Ereignistabelle.
ID | Die eindeutige ID zur Identifizierung des Ereignisses. |
Benutzer-ID | Die Benutzer-ID zur Identifizierung des entsprechenden Benutzers. |
Quellen-ID | Die Quell-ID zur Identifizierung der entsprechenden Entität. |
Quelltyp | Der Quelltyp, um die entsprechende Entität von anderen Entitäten zu unterscheiden. |
Titel | Der Veranstaltungstitel. |
Beschreibung | Die Ereignisbeschreibung, um die wichtigsten Höhepunkte des Ereignisses zu speichern. |
Typ | Der Typ zur Unterscheidung zwischen den verschiedenen Ereignistypen. |
URL | Die URL, um den Benutzer zu einem bestimmten Link umzuleiten, der mit dem Ereignis verknüpft ist. |
Aktiv | Flag, um zu identifizieren, ob das Ereignis aktiv ist und im Kalender angezeigt werden kann. |
System | Flag, um zu identifizieren, ob das Ereignis von der Anwendung generiert wird. Die Bewerbungsereignisse können immer im Kalender angezeigt werden. |
Erinnerungsanzahl | Die maximale Anzahl an Erinnerungen, die für das Ereignis ausgelöst werden können. |
Erinnerungsintervall | Das Erinnerungsintervall. |
Erinnerungseinheit | Die Erinnerungseinheit zur Angabe des Erinnerungsintervalls in Minuten, Stunden oder Tagen. |
Erstellt am | Es speichert das Datum und die Uhrzeit, zu der das Ereignis erstellt wurde. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung des Ereignisses werden gespeichert. |
Geplant um | Datum und Uhrzeit werden im Kalender gespeichert. |
Ausgelöst bei | Es speichert das Datum und die Uhrzeit, zu der das Ereignis ausgelöst wurde. |
Inhalt | Die Spalte, die zum Speichern des Ereignisinhalts verwendet wird. |
Es verwendet die Spalte Aktiv um festzustellen, ob das nutzergenerierte Ereignis im Kalender angezeigt werden kann. Das System Flag kann verwendet werden, um die von der Anwendung generierten Ereignisse zu markieren. Die von der Anwendung generierten Ereignisse können immer im Kalender angezeigt werden. Die Spalten Quell-ID und Quellentyp kann verwendet werden, um die anderen Tabellen oder Entitäten zu identifizieren, die dem Ereignis zugeordnet sind. Die Spalte Ausgelöst bei speichert das Datum und die Uhrzeit, zu der das Ereignis zuletzt ausgelöst wurde. Die Ereignistabelle mit den entsprechenden Einschränkungen wird unten angezeigt.
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);
Ereignisvorlagentabelle
In diesem Abschnitt entwerfen wir die Ereignisvorlagentabelle verwendet, um den Ereignisinhalt zu generieren. Die Anwendung kann ferner das geeignete Vorlagensystem verwenden, um die Vorlage zu parsen, um den Ereignisinhalt zu erzeugen. Nachfolgend finden Sie die Beschreibung aller Spalten der Ereignisvorlagentabelle.
ID | Die eindeutige ID zur Identifizierung der Ereignisvorlage. |
Titel | Der Vorlagentitel. |
Beschreibung | Die Vorlagenbeschreibung. |
Typ | Der Typ zur Klassifizierung der Vorlagen. |
Quelltyp | Der Quelltyp, um die Vorlagen nach dem Quelltyp zu klassifizieren. |
Erstellt am | Er speichert Datum und Uhrzeit der Erstellung der Vorlage. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung der Vorlage werden gespeichert. |
Inhalt | Die Spalte zum Speichern des Vorlageninhalts. |
Die Ereignisvorlagentabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
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`) );
Erinnerungstabelle
Wir brauchen auch eine Tabelle, um die Erinnerungen zu speichern, die durch aktive oder Systemereignisse ausgelöst werden. Dieser Abschnitt enthält die Tabelle und Spalten, die zum Verwalten der Erinnerungen erforderlich sind. Unten erwähnt ist die Beschreibung aller Spalten der Erinnerungstabelle.
ID | Die eindeutige ID zur Identifizierung der Erinnerung. |
Ereignis-ID | Die Ereignis-ID zur Identifizierung des mit der Erinnerung verknüpften Ereignisses. |
Benutzer-ID | Die Benutzer-ID zur Identifizierung des mit der Erinnerung verknüpften Benutzers. |
Lesen | Das Flag, um die Erinnerung als gelesen/ungelesen zu markieren. |
Papierkorb | Das Flag, um die Erinnerung als Papierkorb zu markieren. |
Erstellt am | Datum und Uhrzeit der Erstellung der Erinnerung werden gespeichert. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung der Erinnerung werden gespeichert. |
Inhalt | Die Erinnerungsnachricht. |
Die Erinnerungstabelle mit den entsprechenden Einschränkungen ist wie unten gezeigt.
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;
Verbesserungen
Wir können auch Gruppenereignisse mit demselben Datenbankschema verwalten. Dies kann durch Hinzufügen des Gruppen-Flags zur Ereignistabelle erfolgen, und es ist eine neue Tabelle erforderlich, um die Teilnehmer des Gruppenereignisses zu verwalten.
Zusammenfassung
In diesem Tutorial haben wir das Datenbankdesign eines Kalendersystems zum Speichern von Benutzerereignissen und Erinnerungen besprochen. Es stellte auch das Datenbankdesign bereit, um die Benutzerereignisse zu verwalten, die von den Systemen oder Anwendungen ausgelöst wurden.
Sie können Ihre Kommentare einreichen, um an der Diskussion teilzunehmen. Sie könnten auch daran interessiert sein, die Datenbank der Anwendungen Blog und Umfrage &Umfrage zu entwerfen. Das vollständige Datenbankschema ist auch auf GitHub verfügbar.