Този урок предоставя пълните стъпки за проектиране на схема на база данни на системата за календарни събития и напомняния, за да управлявате календарните събития на потребителите, както и да съхранявате напомнянията. Тя може да бъде допълнително подобрена и използвана за управление на събитията и напомнянията на други субекти, освен потребителя на системата.
Диаграмата на взаимоотношенията на обектите или визуалният дизайн на базата данни е показан по-долу.
Дизайн на база данни за календарни събития и напомняния
Можете също да посетите популярните уроци, включително Как да инсталирате MySQL 8 на Ubuntu 20.04 LTS, Как да инсталирате MySQL 8 на Windows, Как да инсталирате MySQL Workbench на Ubuntu, Как да инсталирате MySQL 8 с Workbench на Windows 10, RBAC база данни в MySql, База данни за блогове в MySql, База данни за тестове в MySQL, База данни за анкети и анкети в MySQL, База данни за онлайн пазарска кошница в MySQL и Научете основни SQL заявки в MySQL.
База данни с календари
Първата стъпка е да създадете календарна база данни. Може да се създаде с помощта на заявката, както е показано по-долу.
CREATE SCHEMA `calendar` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Използвал съм набора от знаци utf8mb4 за поддръжка на широк спектър от знаци.
Таблица с потребители
В този раздел ще проектираме Таблица на потребителите за съхраняване на потребителска информация. Потребителите могат да управляват свои собствени събития и напомняния. По-долу е посочено описанието на всички колони на потребителската таблица.
Id | Уникалният идентификатор за идентифициране на потребителя. |
Име | Първото име на потребителя. |
Биринно име | Биринното име на потребителя. |
Фамилия | Фамилията на потребителя. |
Мобилни | Мобилният номер на потребителя. Може да се използва за влизане и регистрация. |
Имейл | Имейлът на потребителя. Може да се използва за влизане и регистрация. |
Хеш на парола | Хешът на паролата, генериран от подходящия алгоритъм. Трябва да избягваме съхраняването на обикновени или криптирани пароли. |
Регистриран в | Тази колона може да се използва за изчисляване на живота на потребителя с приложението. |
Последно влизане | Може да се използва за идентифициране на последното влизане на потребителя. |
Въведение | Краткото представяне на потребителя. |
Профил | Подробности за потребителя. |
Потребителската таблица със съответните ограничения е показана по-долу.
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) );
Таблица на събитията
В този раздел ще проектираме Таблица за събития за съхраняване на потребителските събития и събитията, задействани от приложението. По-долу е споменато описанието на всички колони на таблицата на събитията.
Id | Уникалният идентификатор за идентифициране на събитието. |
Потребителски идентификатор | Потребителският идентификатор за идентифициране на съответния потребител. |
Идентификатор на източника | Идентификацията на източника за идентифициране на съответния обект. |
Тип източник | Типът източник за разграничаване на съответния обект сред другите обекти. |
Заглавие | Заглавието на събитието. |
Описание | Описанието на събитието за съхраняване на основните акценти на събитието. |
Тип | Типът за разграничаване на различните типове събития. |
URL адрес | URL адресът за пренасочване на потребителя към конкретна връзка, свързана със събитието. |
Активно | Флаг, за да определите дали събитието е активно и отговаря на условията за показване в календара. |
Система | Флаг, за да идентифицирате дали събитието е генерирано от приложението. Събитията от приложението винаги ще отговарят на условията за показване в календара. |
Брой напомняния | Максималният брой напомняния, които могат да бъдат задействани за събитието. |
Интервал за напомняния | Интервалът за напомняне. |
Единица за напомняния | Единицата за напомняне за идентифициране на интервала на напомняне в минути, часове или дни. |
Създаден в | Той съхранява датата и часа, в които е създадено събитието. |
Актуализирано в | Той съхранява датата и часа, в които събитието се актуализира. |
Насрочено в | Той съхранява датата и часа в календара. |
Задейства се в | Той съхранява датата и часа, в които събитието е задействано. |
Съдържание | Колоната, използвана за съхраняване на съдържанието на събитието. |
Той използва колоната Активна за да определите дали генерираното от потребителя събитие може да бъде показано в календара. Системата флагът може да се използва за маркиране на генерираните от приложението събития. Генерираните от приложението събития винаги могат да се показват в календара. Колоните Идентификатор на източника и Тип източник може да се използва за идентифициране на другите таблици или обекти, свързани със събитието. Колоната Задействана в съхранява датата и часа, в който събитието е задействано последно. Таблицата на събитията със съответните ограничения е показана по-долу.
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);
Таблица с шаблони за събития
В този раздел ще проектираме Таблица за шаблони за събития използвани за генериране на съдържанието на събитието. Приложението може допълнително да използва подходящата шаблонна система, за да анализира шаблона, за да генерира съдържанието на събитието. По-долу е споменато описанието на всички колони на таблицата с шаблони за събития.
Id | Уникалният идентификатор за идентифициране на шаблона за събитие. |
Заглавие | Заглавието на шаблона. |
Описание | Описанието на шаблона. |
Тип | Типът за класифициране на шаблоните. |
Тип източник | Типът на източника за класифициране на шаблоните според типа източник. |
Създаден в | Той съхранява датата и часа, в които е създаден шаблонът. |
Актуализирано в | Той съхранява датата и часа, в които шаблонът е бил актуализиран. |
Съдържание | Колоната, използвана за съхраняване на съдържанието на шаблона. |
Таблицата с шаблони за събития със съответните ограничения е както е показано по-долу.
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`) );
Таблица с напомняния
Нуждаем се и от таблица за съхраняване на напомнянията, задействани от активни или системни събития. Този раздел предоставя таблицата и колоните, необходими за управление на напомнянията. По-долу е посочено описанието на всички колони на таблицата с напомняния.
Id | Уникалният идентификатор за идентифициране на напомнянето. |
Идентификатор на събитие | Идентификаторът на събитието за идентифициране на събитието, свързано с напомнянето. |
Потребителски идентификатор | Потребителският идентификатор за идентифициране на потребителя, свързан с напомнянето. |
Прочетете | Флагът за маркиране на напомнянето като прочетено/непрочетено. |
Кошче | Флагът за маркиране на напомнянето като кошче. |
Създаден в | Той съхранява датата и часа, в които е създадено напомнянето. |
Актуализирано в | Той съхранява датата и часа, в които напомнянето се актуализира. |
Съдържание | Напомнящото съобщение. |
Таблицата с напомняния със съответните ограничения е както е показано по-долу.
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;
Подобрения
Можем също да управляваме групови събития, използвайки същата схема на базата данни. Това може да стане чрез добавяне на флага на групата към таблицата със събития и е необходима нова таблица за управление на участниците в груповото събитие.
Резюме
В този урок обсъдихме дизайна на база данни на календарна система за съхраняване на потребителски събития и напомняния. Той също така предостави дизайна на базата данни за управление на потребителските събития, задействани от системите или приложението.
Можете да изпратите вашите коментари, за да се присъедините към дискусията. Може да се интересувате и от проектирането на базата данни на приложенията за блогове и анкети и анкети. Пълната схема на базата данни е достъпна и на GitHub.