sql >> Base de Datos >  >> RDS >> Mysql

Guía para diseñar una base de datos para eventos de calendario y recordatorios en MySQL

Este tutorial proporciona los pasos completos para diseñar un esquema de base de datos del sistema de eventos y recordatorios del calendario para administrar los eventos del calendario de los usuarios y también almacenar los recordatorios. Se puede mejorar aún más y utilizar para administrar los eventos y recordatorios de otras entidades además del usuario del sistema.

El Diagrama de Relación de Entidades o el diseño de la base de datos visual se muestra a continuación.

Diseño de la base de datos de eventos y recordatorios del calendario

También puede visitar los tutoriales populares que incluyen Cómo instalar MySQL 8 en Ubuntu 20.04 LTS, Cómo instalar MySQL 8 en Windows, Cómo instalar MySQL Workbench en Ubuntu, Cómo instalar MySQL 8 con Workbench en Windows 10, Base de datos RBAC en MySql, Blog Database en MySql, Quiz Database en MySQL, Poll &Survey Database en MySQL, Online Shopping Cart Database en MySQL y Learn Basic SQL Queries In MySQL.

Base de datos de calendario

El primer paso es crear la base de datos del calendario. Se puede crear usando la consulta como se muestra a continuación.

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

He usado el conjunto de caracteres utf8mb4 para admitir una amplia gama de caracteres.

Tabla de usuarios

En esta sección, diseñaremos la Tabla de usuarios para almacenar información del usuario. Los usuarios pueden gestionar sus propios eventos y recordatorios. A continuación se menciona la descripción de todas las columnas de la tabla de usuarios.

Id La identificación única para identificar al usuario.
Nombre El nombre del usuario.
Segundo Nombre El segundo nombre del usuario.
Apellido El apellido del usuario.
Móvil El número de móvil del usuario. Se puede utilizar con fines de inicio de sesión y registro.
Correo electrónico El correo electrónico del usuario. Se puede utilizar con fines de inicio de sesión y registro.
Hash de contraseña El hash de contraseña generado por el algoritmo apropiado. Debemos evitar almacenar contraseñas simples o encriptadas.
Registrado en Esta columna se puede utilizar para calcular la vida del usuario con la aplicación.
Último inicio de sesión Se puede utilizar para identificar el último inicio de sesión del usuario.
Introducción La breve introducción del Usuario.
Perfil Detalles del usuario.

La tabla de usuarios con las restricciones adecuadas se muestra a continuación.

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

Tabla de eventos

En esta sección, diseñaremos la Tabla de eventos para almacenar los eventos del usuario y los eventos desencadenados por la aplicación. A continuación se menciona la descripción de todas las columnas de la tabla de eventos.

Id La identificación única para identificar el evento.
ID de usuario El ID de usuario para identificar al usuario correspondiente.
Id. de la fuente La identificación de la fuente para identificar la entidad correspondiente.
Tipo de fuente El tipo de fuente para distinguir la entidad correspondiente entre otras entidades.
Título El título del evento.
Descripción La descripción del evento para almacenar los aspectos más destacados del evento.
Tipo El tipo para distinguir entre los diferentes tipos de eventos.
URL La URL para redirigir al usuario a un enlace específico asociado con el evento.
Activo Marca para identificar si el evento está activo y elegible para mostrarse en el calendario.
Sistema Marca para identificar si el evento es generado por la aplicación. Los eventos de la aplicación siempre serán elegibles para mostrarse en el calendario.
Recuento de recordatorios El número máximo de recordatorios que se pueden activar para el evento.
Intervalo de recordatorio El intervalo de recordatorio.
Unidad de recordatorio La unidad de recordatorio para identificar el intervalo de recordatorio en minutos, horas o días.
Creado en Almacena la fecha y hora en que se crea el evento.
Actualizado en Almacena la fecha y hora en que se actualiza el evento.
Programado en Almacena la fecha y la hora en el Calendario.
Activado en Almacena la fecha y hora en que se disparó el evento.
Contenido La columna utilizada para almacenar el contenido del evento.

Utiliza la columna Activo para identificar si el evento generado por el usuario se puede mostrar en el calendario. El Sistema bandera se puede utilizar para marcar los eventos generados por la aplicación. Los eventos generados por la aplicación siempre se pueden mostrar en el calendario. Las columnas ID de la fuente y Tipo de fuente se puede utilizar para identificar las otras tablas o entidades asociadas con el evento. La columna Desencadenado en almacena la fecha y la hora en que se activó el evento por última vez. La tabla de eventos con las restricciones apropiadas se muestra a continuación.

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

Tabla de plantillas de eventos

En esta sección, diseñaremos la Tabla de plantillas de eventos utilizado para generar el contenido del evento. La aplicación puede utilizar además el sistema de plantilla apropiado para analizar la plantilla para generar el contenido del evento. A continuación se menciona la descripción de todas las columnas de la tabla de plantillas de eventos.

Id La identificación única para identificar la plantilla de evento.
Título El título de la plantilla.
Descripción La descripción de la plantilla.
Tipo El tipo para clasificar las plantillas.
Tipo de fuente El tipo de fuente para clasificar las plantillas según el tipo de fuente.
Creado en Almacena la fecha y hora en que se creó la plantilla.
Actualizado en Almacena la fecha y hora en que se actualizó la plantilla.
Contenido La columna utilizada para almacenar el contenido de la plantilla.

La tabla de plantillas de eventos con las restricciones adecuadas se muestra a continuación.

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

Tabla de recordatorios

También necesitamos una tabla para almacenar los recordatorios activados por eventos activos o del sistema. Esta sección proporciona la tabla y las columnas necesarias para administrar los recordatorios. A continuación se menciona la descripción de todas las columnas de la Tabla de Recordatorios.

Id La identificación única para identificar el recordatorio.
Id. de evento El ID del evento para identificar el evento asociado con el recordatorio.
ID de usuario El ID de usuario para identificar al usuario asociado con el recordatorio.
Leer La bandera para marcar el recordatorio como leído/no leído.
Papelera La bandera para marcar el recordatorio como papelera.
Creado en Almacena la fecha y hora en que se crea el recordatorio.
Actualizado en Almacena la fecha y hora en que se actualiza el recordatorio.
Contenido El mensaje de recordatorio.

La tabla de recordatorios con las restricciones adecuadas se muestra a continuación.

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;

Mejoras

También podemos administrar eventos grupales utilizando el mismo esquema de base de datos. Se puede hacer agregando la bandera del grupo a la tabla de eventos y se requiere una nueva tabla para administrar los participantes del evento grupal.

Resumen

En este tutorial, hemos discutido el diseño de la base de datos de un sistema de calendario para almacenar eventos y recordatorios de usuarios. También proporcionó el diseño de la base de datos para administrar los eventos de usuario activados por los sistemas o la aplicación.

Puede enviar sus comentarios para unirse a la discusión. También te puede interesar diseñar la base de datos de las aplicaciones Blog y Poll &Survey. El esquema completo de la base de datos también está disponible en GitHub.