Questo tutorial fornisce i passaggi completi per progettare uno schema di database del sistema di promemoria e eventi del calendario per gestire gli eventi del calendario degli utenti e anche archiviare i promemoria. Può essere ulteriormente migliorato e utilizzato per gestire eventi e promemoria di altre entità oltre all'utente del sistema.
Il diagramma della relazione tra entità o il design del database visivo è mostrato di seguito.
Progettazione di database di eventi e promemoria del calendario
Puoi anche visitare i tutorial popolari tra cui Come installare MySQL 8 su Ubuntu 20.04 LTS, Come installare MySQL 8 su Windows, Come installare MySQL Workbench su Ubuntu, Come installare MySQL 8 con Workbench su Windows 10, Database RBAC in MySql, Database del blog in MySql, database dei quiz in MySQL, database di sondaggi e sondaggi in MySQL, database del carrello degli acquisti online in MySQL e informazioni sulle query SQL di base in MySQL.
Database calendario
Il primo passo è creare il database del calendario. Può essere creato utilizzando la query come mostrato di seguito.
CREATE SCHEMA `calendar` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ho usato il set di caratteri utf8mb4 per supportare un'ampia gamma di caratteri.
Tabella utenti
In questa sezione, progetteremo la Tabella utente per memorizzare le informazioni sull'utente. Gli utenti possono gestire i propri eventi e promemoria. Di seguito è riportata la descrizione di tutte le colonne della Tabella Utente.
ID | L'ID univoco per identificare l'utente. |
Nome | Il nome dell'utente. |
Secondo nome | Il secondo nome dell'utente. |
Cognome | Il cognome dell'utente. |
Cellulare | Il numero di cellulare dell'utente. Può essere utilizzato per scopi di accesso e registrazione. |
L'e-mail dell'utente. Può essere utilizzato per scopi di accesso e registrazione. | |
Hash password | L'hash della password generato dall'algoritmo appropriato. Dobbiamo evitare di memorizzare password semplici o crittografate. |
Registrato presso | Questa colonna può essere utilizzata per calcolare la vita dell'utente con l'applicazione. |
Ultimo accesso | Può essere utilizzato per identificare l'ultimo accesso dell'utente. |
Introduzione | La breve introduzione dell'Utente. |
Profilo | Dettagli utente. |
Di seguito è mostrata la tabella utente con i vincoli appropriati.
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) );
Tabella degli eventi
In questa sezione, progetteremo la Tabella degli eventi per memorizzare gli eventi utente e gli eventi attivati dall'applicazione. Di seguito è riportata la descrizione di tutte le colonne della Tabella degli Eventi.
ID | L'ID univoco per identificare l'evento. |
ID utente | L'ID utente per identificare l'utente corrispondente. |
ID sorgente | L'ID sorgente per identificare l'entità corrispondente. |
Tipo di origine | Il tipo di origine per distinguere l'entità corrispondente tra le altre entità. |
Titolo | Il titolo dell'evento. |
Descrizione | La descrizione dell'evento per memorizzare i momenti salienti dell'evento. |
Tipo | Il tipo per distinguere tra i diversi tipi di evento. |
URL | L'URL per reindirizzare l'utente a un collegamento specifico associato all'evento. |
Attivo | Segnala per identificare se l'evento è attivo e idoneo per essere visualizzato nel calendario. |
Sistema | Flag per identificare se l'evento è generato dall'applicazione. Gli eventi dell'applicazione potranno sempre essere visualizzati nel calendario. |
Conteggio promemoria | Il numero massimo di promemoria che possono essere attivati per l'evento. |
Intervallo promemoria | L'intervallo di promemoria. |
Unità promemoria | L'unità di promemoria per identificare l'intervallo di promemoria in minuti, ore o giorni. |
Creato a | Memorizza la data e l'ora in cui viene creato l'evento. |
Aggiornato a | Memorizza la data e l'ora in cui l'evento viene aggiornato. |
Programmato per | Memorizza la data e l'ora sul Calendario. |
Attivato a | Memorizza la data e l'ora in cui è stato attivato l'evento. |
Contenuto | La colonna utilizzata per memorizzare il contenuto dell'evento. |
Utilizza la colonna Attivo per identificare se l'evento generato dall'utente può essere visualizzato nel calendario. Il Sistema flag può essere utilizzato per contrassegnare gli eventi generati dall'applicazione. Gli eventi generati dall'applicazione possono sempre essere visualizzati sul calendario. Le colonne ID sorgente e Tipo di origine può essere utilizzato per identificare le altre tabelle o entità associate all'evento. La colonna Attivato a memorizza la data e l'ora in cui l'evento è stato attivato l'ultima volta. La tabella degli eventi con i vincoli appropriati è mostrata di seguito.
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);
Tabella dei modelli di eventi
In questa sezione, progetteremo la Tabella dei modelli di eventi utilizzato per generare il contenuto dell'evento. L'applicazione può inoltre utilizzare il sistema di modelli appropriato per analizzare il modello per generare il contenuto dell'evento. Di seguito è indicata la descrizione di tutte le colonne della Tabella dei modelli di eventi.
ID | L'ID univoco per identificare il modello di evento. |
Titolo | Il titolo del modello. |
Descrizione | La descrizione del modello. |
Tipo | Il tipo per classificare i modelli. |
Tipo di origine | Il tipo di origine per classificare i modelli in base al tipo di origine. |
Creato a | Memorizza la data e l'ora in cui è stato creato il modello. |
Aggiornato a | Memorizza la data e l'ora in cui il modello è stato aggiornato. |
Contenuto | La colonna utilizzata per memorizzare il contenuto del modello. |
La tabella dei modelli di eventi con i vincoli appropriati è quella mostrata di seguito.
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`) );
Tabella promemoria
Abbiamo anche bisogno di una tabella per memorizzare i promemoria attivati da eventi attivi o di sistema. Questa sezione fornisce la tabella e le colonne necessarie per gestire i promemoria. Di seguito è riportata la descrizione di tutte le colonne della Tabella dei promemoria.
ID | L'ID univoco per identificare il promemoria. |
ID evento | L'ID evento per identificare l'evento associato al promemoria. |
ID utente | L'ID utente per identificare l'utente associato al promemoria. |
Leggi | Il flag per contrassegnare il promemoria come letto/non letto. |
Cestino | La bandiera per contrassegnare il promemoria come cestino. |
Creato a | Memorizza la data e l'ora in cui viene creato il promemoria. |
Aggiornato a | Memorizza la data e l'ora in cui il promemoria viene aggiornato. |
Contenuto | Il messaggio di promemoria. |
La tabella dei promemoria con i vincoli appropriati è quella mostrata di seguito.
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;
Miglioramenti
Possiamo anche gestire eventi di gruppo utilizzando lo stesso schema di database. Può essere fatto aggiungendo il flag di gruppo alla tabella degli eventi ed è necessaria una nuova tabella per gestire i partecipanti all'evento di gruppo.
Riepilogo
In questo tutorial, abbiamo discusso la progettazione del database di un sistema di calendario per archiviare eventi e promemoria degli utenti. Ha inoltre fornito la progettazione del database per gestire gli eventi utente attivati dai sistemi o dall'applicazione.
Puoi inviare i tuoi commenti per partecipare alla discussione. Potresti anche essere interessato a progettare il database delle applicazioni Blog e Poll &Survey. Lo schema completo del database è disponibile anche su GitHub.