Mysql
 sql >> Base de données >  >> RDS >> Mysql

Guide pour concevoir une base de données pour les événements de calendrier et les rappels dans MySQL

Ce didacticiel fournit les étapes complètes pour concevoir un schéma de base de données du système d'événements et de rappels de calendrier pour gérer les événements de calendrier des utilisateurs et également stocker les rappels. Il peut être encore amélioré et utilisé pour gérer les événements et les rappels d'autres entités en dehors de l'utilisateur du système.

Le diagramme de relation d'entité ou la conception visuelle de la base de données est illustré ci-dessous.

Conception de la base de données d'événements et de rappels du calendrier

Vous pouvez également consulter les didacticiels populaires, notamment Comment installer MySQL 8 sur Ubuntu 20.04 LTS, Comment installer MySQL 8 sur Windows, Comment installer MySQL Workbench sur Ubuntu, Comment installer MySQL 8 avec Workbench sur Windows 10, Base de données RBAC dans MySql, Base de données de blogs dans MySql, base de données de quiz dans MySQL, base de données de sondages et d'enquêtes dans MySQL, base de données de paniers d'achat en ligne dans MySQL et apprentissage des requêtes SQL de base dans MySQL.

Base de données du calendrier

La toute première étape consiste à créer la base de données de calendrier. Il peut être créé à l'aide de la requête comme indiqué ci-dessous.

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

J'ai utilisé le jeu de caractères utf8mb4 pour prendre en charge un large éventail de caractères.

Tableau des utilisateurs

Dans cette section, nous allons concevoir la table des utilisateurs pour stocker les informations de l'utilisateur. Les utilisateurs peuvent gérer leurs propres événements et rappels. Vous trouverez ci-dessous la description de toutes les colonnes de la table des utilisateurs.

Identifiant L'identifiant unique pour identifier l'utilisateur.
Prénom Le prénom de l'utilisateur.
Deuxième prénom Le deuxième prénom de l'utilisateur.
Nom de famille Le nom de famille de l'utilisateur.
Mobile Le numéro de portable de l'utilisateur. Il peut être utilisé à des fins de connexion et d'enregistrement.
E-mail L'adresse e-mail de l'utilisateur. Il peut être utilisé à des fins de connexion et d'enregistrement.
Hachage du mot de passe Le hachage du mot de passe généré par l'algorithme approprié. Nous devons éviter de stocker des mots de passe simples ou cryptés.
Enregistré à Cette colonne peut être utilisée pour calculer la durée de vie de l'utilisateur avec l'application.
Dernière connexion Il peut être utilisé pour identifier la dernière connexion de l'utilisateur.
Introduction La brève présentation de l'utilisateur.
Profil Détails de l'utilisateur.

La table utilisateur avec les contraintes appropriées est illustrée ci-dessous.

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

Tableau des événements

Dans cette section, nous allons concevoir le tableau des événements pour stocker les événements utilisateur et les événements déclenchés par l'application. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des événements.

Identifiant L'identifiant unique pour identifier l'événement.
Identifiant utilisateur L'identifiant de l'utilisateur pour identifier l'utilisateur correspondant.
Identifiant source L'identifiant source pour identifier l'entité correspondante.
Type de source Le type de source pour distinguer l'entité correspondante parmi d'autres entités.
Titre Le titre de l'événement.
Description La description de l'événement pour stocker les points saillants de l'événement.
Type Le type permettant de distinguer les différents types d'événements.
URL L'URL pour rediriger l'utilisateur vers un lien spécifique associé à l'événement.
Actif Indicateur pour identifier si l'événement est actif et éligible pour être affiché sur le calendrier.
Système Flag pour identifier si l'événement est généré par l'application. Les événements de l'application pourront toujours être affichés sur le calendrier.
Nombre de rappels Le nombre maximum de rappels pouvant être déclenchés pour l'événement.
Intervalle de rappel L'intervalle de rappel.
Unité de rappel L'unité de rappel pour identifier l'intervalle de rappel en minutes, heures ou jours.
Créé à Il stocke la date et l'heure auxquelles l'événement est créé.
Mis à jour à Il stocke la date et l'heure auxquelles l'événement est mis à jour.
Planifié à Il stocke la date et l'heure sur le calendrier.
déclenché à Il stocke la date et l'heure auxquelles l'événement a été déclenché.
Contenu La colonne utilisée pour stocker le contenu de l'événement.

Il utilise la colonne Active pour identifier si l'événement généré par l'utilisateur peut être affiché sur le calendrier. Le système flag peut être utilisé pour marquer les événements générés par l'application. Les événements générés par l'application peuvent toujours être affichés sur le calendrier. Les colonnes ID source et Type de source peut être utilisé pour identifier les autres tables ou entités associées à l'événement. La colonne Déclencher à stocke la date et l'heure auxquelles l'événement a été déclenché pour la dernière fois. Le tableau des événements avec les contraintes appropriées est illustré ci-dessous.

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

Tableau des modèles d'événements

Dans cette section, nous allons concevoir le tableau de modèles d'événements utilisé pour générer le contenu de l'événement. L'application peut en outre utiliser le système de modèle approprié pour analyser le modèle afin de générer le contenu de l'événement. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des modèles d'événements.

Identifiant L'identifiant unique pour identifier le modèle d'événement.
Titre Le titre du modèle.
Description La description du modèle.
Type Le type pour classer les modèles.
Type de source Le type de source pour classer les modèles selon le type de source.
Créé à Il stocke la date et l'heure auxquelles le modèle a été créé.
Mis à jour à Il stocke la date et l'heure auxquelles le modèle a été mis à jour.
Contenu La colonne utilisée pour stocker le contenu du modèle.

Le tableau de modèle d'événement avec les contraintes appropriées est illustré ci-dessous.

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

Tableau de rappel

Nous avons également besoin d'une table pour stocker les rappels déclenchés par des événements actifs ou système. Cette section fournit le tableau et les colonnes nécessaires pour gérer les rappels. Vous trouverez ci-dessous la description de toutes les colonnes du tableau de rappel.

Identifiant L'identifiant unique pour identifier le rappel.
Identifiant d'événement L'identifiant de l'événement pour identifier l'événement associé au rappel.
Identifiant utilisateur L'identifiant de l'utilisateur pour identifier l'utilisateur associé au rappel.
Lire L'indicateur pour marquer le rappel comme lu/non lu.
Corbeille L'indicateur pour marquer le rappel comme corbeille.
Créé à Il stocke la date et l'heure auxquelles le rappel est créé.
Mis à jour à Il stocke la date et l'heure auxquelles le rappel est mis à jour.
Contenu Le message de rappel.

Le tableau de rappel avec les contraintes appropriées est illustré ci-dessous.

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;

Améliorations

Nous pouvons également gérer les événements de groupe en utilisant le même schéma de base de données. Cela peut être fait en ajoutant le drapeau de groupe à la table des événements et une nouvelle table est nécessaire pour gérer les participants de l'événement de groupe.

Résumé

Dans ce didacticiel, nous avons discuté de la conception de la base de données d'un système de calendrier pour stocker les événements et les rappels des utilisateurs. Il a également fourni la conception de la base de données pour gérer les événements utilisateur déclenchés par les systèmes ou l'application.

Vous pouvez soumettre vos commentaires pour participer à la discussion. Vous pouvez également être intéressé par la conception de la base de données des applications Blog et Poll &Survey. Le schéma complet de la base de données est également disponible sur GitHub.