Este tutorial fornece as etapas completas para projetar um esquema de banco de dados do Calendar Event and Reminder System para gerenciar os eventos de calendário dos usuários e também armazenar os lembretes. Ele pode ser aprimorado e usado para gerenciar os eventos e lembretes de outras entidades além do usuário do sistema.
O diagrama de relacionamento de entidade ou design de banco de dados visual é mostrado abaixo.
Projeto de banco de dados de lembretes e eventos de calendário
Você também pode visitar os tutoriais populares, incluindo como instalar o MySQL 8 no Ubuntu 20.04 LTS, como instalar o MySQL 8 no Windows, como instalar o MySQL Workbench no Ubuntu, como instalar o MySQL 8 com o Workbench no Windows 10, banco de dados RBAC no MySql, Banco de dados de blog em MySQL, banco de dados de questionário em MySQL, banco de dados de pesquisa e pesquisa em MySQL, banco de dados de carrinho de compras on-line em MySQL e aprenda consultas básicas de SQL em MySQL.
Banco de dados de calendário
O primeiro passo é criar o banco de dados do calendário. Ele pode ser criado usando a consulta conforme mostrado abaixo.
CREATE SCHEMA `calendar` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Eu usei o conjunto de caracteres utf8mb4 para suportar uma ampla gama de caracteres.
Tabela de usuário
Nesta seção, projetaremos a Tabela do usuário para armazenar informações do usuário. Os usuários podem gerenciar seus próprios eventos e lembretes. Abaixo está a descrição de todas as colunas da Tabela de Usuários.
ID | O ID exclusivo para identificar o usuário. |
Nome | O primeiro nome do usuário. |
Nome do meio | O nome do meio do usuário. |
Sobrenome | O sobrenome do usuário. |
Celular | O número de celular do usuário. Ele pode ser usado para fins de login e registro. |
O e-mail do usuário. Ele pode ser usado para fins de login e registro. | |
Hash de senha | O hash de senha gerado pelo algoritmo apropriado. Devemos evitar armazenar senhas simples ou criptografadas. |
Registrado em | Esta coluna pode ser usada para calcular a vida útil do usuário com o aplicativo. |
Último login | Pode ser usado para identificar o último login do usuário. |
Introdução | A breve introdução do usuário. |
Perfil | Detalhes do usuário. |
A Tabela de Usuários com as restrições apropriadas é mostrada abaixo.
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) );
Tabela de eventos
Nesta seção, projetaremos a Tabela de eventos para armazenar os eventos do usuário e os eventos acionados pelo aplicativo. Abaixo está a descrição de todas as colunas da Tabela de Eventos.
ID | O ID exclusivo para identificar o evento. |
ID de usuário | O ID do usuário para identificar o usuário correspondente. |
ID de origem | O código de origem para identificar a entidade correspondente. |
Tipo de fonte | O tipo de origem para distinguir a entidade correspondente entre outras entidades. |
Título | O título do evento. |
Descrição | A descrição do evento para armazenar os principais destaques do evento. |
Tipo | O tipo para distinguir entre os diferentes tipos de eventos. |
URL | A URL para redirecionar o usuário para um link específico associado ao evento. |
Ativo | Sinalize para identificar se o evento está ativo e qualificado para ser exibido na agenda. |
Sistema | Sinalize para identificar se o evento é gerado pelo aplicativo. Os eventos do aplicativo sempre estarão qualificados para serem exibidos no calendário. |
Contagem de lembretes | O número máximo de lembretes que podem ser acionados para o evento. |
Intervalo de lembrete | O intervalo do lembrete. |
Unidade de lembrete | A unidade de lembrete para identificar o intervalo de lembrete em minutos, horas ou dias. |
Criado em | Ele armazena a data e hora em que o evento foi criado. |
Atualizado em | Ele armazena a data e hora em que o evento é atualizado. |
Agendado em | Ele armazena a data e a hora no Calendário. |
Acionado em | Ele armazena a data e hora em que o evento foi acionado. |
Conteúdo | A coluna usada para armazenar o conteúdo do evento. |
Ele usa a coluna Ativo para identificar se o evento gerado pelo usuário pode ser exibido no calendário. O Sistema sinalizador pode ser usado para marcar os eventos gerados pelo aplicativo. Os eventos gerados pelo aplicativo sempre podem ser exibidos no calendário. As colunas ID de origem e Tipo de origem pode ser usado para identificar as outras tabelas ou entidades associadas ao evento. A coluna Acionado em armazena a data e hora em que o evento foi acionado pela última vez. A Tabela de Eventos com as restrições apropriadas é mostrada abaixo.
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);
Tabela de modelo de evento
Nesta seção, projetaremos a Tabela de modelo de evento usado para gerar o conteúdo do evento. O aplicativo pode ainda usar o sistema de modelo apropriado para analisar o modelo para gerar o conteúdo do evento. Abaixo está a descrição de todas as colunas da Tabela de Templates de Eventos.
ID | O ID exclusivo para identificar o modelo de evento. |
Título | O título do modelo. |
Descrição | A descrição do modelo. |
Tipo | O tipo para classificar os modelos. |
Tipo de fonte | O tipo de origem para classificar os modelos de acordo com o tipo de origem. |
Criado em | Ele armazena a data e hora em que o modelo foi criado. |
Atualizado em | Ele armazena a data e hora em que o modelo foi atualizado. |
Conteúdo | A coluna usada para armazenar o conteúdo do modelo. |
A Tabela de Modelos de Eventos com as restrições apropriadas é mostrada abaixo.
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`) );
Tabela de lembrete
Também precisamos de uma tabela para armazenar os lembretes acionados por eventos ativos ou do sistema. Esta seção fornece a tabela e as colunas necessárias para gerenciar os lembretes. Abaixo está a descrição de todas as colunas da Tabela de Lembretes.
ID | O ID exclusivo para identificar o lembrete. |
ID do evento | O ID do evento para identificar o evento associado ao lembrete. |
ID de usuário | O ID do usuário para identificar o usuário associado ao lembrete. |
Ler | O sinalizador para marcar o lembrete como lido/não lido. |
Lixeira | O sinalizador para marcar o lembrete como lixo. |
Criado em | Ele armazena a data e hora em que o lembrete é criado. |
Atualizado em | Ele armazena a data e hora em que o lembrete é atualizado. |
Conteúdo | A mensagem de lembrete. |
A Tabela de Lembretes com as restrições apropriadas é mostrada abaixo.
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;
Melhorias
Também podemos gerenciar eventos de grupo usando o mesmo esquema de banco de dados. Isso pode ser feito adicionando o sinalizador de grupo à tabela de eventos e uma nova tabela é necessária para gerenciar os participantes do evento de grupo.
Resumo
Neste tutorial, discutimos o design do banco de dados de um sistema de calendário para armazenar eventos e lembretes do usuário. Ele também forneceu o design do banco de dados para gerenciar os eventos do usuário acionados pelos sistemas ou aplicativos.
Você pode enviar seus comentários para participar da discussão. Você também pode estar interessado em projetar o banco de dados dos aplicativos Blog e Poll &Survey. O esquema completo do banco de dados também está disponível no GitHub.