Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przewodnik po projektowaniu bazy danych dla wydarzeń kalendarza i przypomnień w MySQL

Ten samouczek zawiera wszystkie kroki projektowania schematu bazy danych systemu zdarzeń kalendarza i przypomnień w celu zarządzania zdarzeniami kalendarza użytkowników, a także przechowywania przypomnień. Można go dodatkowo ulepszyć i wykorzystać do zarządzania zdarzeniami i przypomnieniami innych podmiotów poza użytkownikiem systemu.

Diagram relacji encji lub wizualny projekt bazy danych pokazano poniżej.

Projekt bazy danych wydarzeń kalendarza i przypomnień

Możesz również odwiedzić popularne samouczki, w tym Jak zainstalować MySQL 8 na Ubuntu 20.04 LTS, Jak zainstalować MySQL 8 w systemie Windows, Jak zainstalować MySQL Workbench na Ubuntu, Jak zainstalować MySQL 8 z Workbench na Windows 10, Baza danych RBAC w MySql, Baza danych blogów w MySql, Baza danych quizów w MySQL, Baza ankiet i ankiet w MySQL, Baza danych koszyka zakupów online w MySQL oraz Nauka podstawowych zapytań SQL w MySQL.

Baza danych kalendarza

Pierwszym krokiem jest stworzenie bazy danych kalendarza. Można go utworzyć za pomocą zapytania, jak pokazano poniżej.

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

Użyłem zestawu znaków utf8mb4 do obsługi szerokiej gamy znaków.

Tabela użytkowników

W tej sekcji zaprojektujemy Tabelę użytkowników do przechowywania informacji o użytkowniku. Użytkownicy mogą zarządzać własnymi wydarzeniami i przypomnieniami. Poniżej znajduje się opis wszystkich kolumn tabeli użytkowników.

Identyfikator Unikalny identyfikator do identyfikacji użytkownika.
Imię Imię użytkownika.
Drugie imię Drugie imię użytkownika.
Nazwisko Nazwisko użytkownika.
Komórka Numer telefonu komórkowego użytkownika. Może być używany do celów logowania i rejestracji.
Poczta e-mail E-mail użytkownika. Może być używany do celów logowania i rejestracji.
Hash hasła Skrót hasła wygenerowany przez odpowiedni algorytm. Musimy unikać przechowywania zwykłych lub zaszyfrowanych haseł.
Zarejestrowano w Ta kolumna może być użyta do obliczenia życia użytkownika z aplikacją.
Ostatnie logowanie Może być używany do identyfikacji ostatniego logowania użytkownika.
Wprowadzenie Krótkie wprowadzenie Użytkownika.
Profil Szczegóły użytkownika.

Tabela użytkownika z odpowiednimi ograniczeniami jest pokazana poniżej.

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 wydarzeń

W tej sekcji zaprojektujemy Tabelę zdarzeń do przechowywania zdarzeń użytkownika i zdarzeń wywołanych przez aplikację. Poniżej znajduje się opis wszystkich kolumn tabeli zdarzeń.

Identyfikator Unikalny identyfikator do identyfikacji zdarzenia.
Identyfikator użytkownika Identyfikator użytkownika do identyfikacji odpowiedniego użytkownika.
Identyfikator źródła Identyfikator źródła do identyfikacji odpowiedniej jednostki.
Typ źródła Typ źródła do rozróżnienia odpowiedniej jednostki wśród innych jednostek.
Tytuł Tytuł wydarzenia.
Opis Opis wydarzenia do przechowywania najważniejszych wydarzeń wydarzenia.
Wpisz Typ do rozróżniania różnych typów zdarzeń.
URL Adres URL przekierowujący użytkownika do określonego linku związanego z wydarzeniem.
Aktywny Oznacz, aby określić, czy wydarzenie jest aktywne i może być wyświetlane w kalendarzu.
System Oznacz, aby określić, czy zdarzenie jest generowane przez aplikację. Zdarzenia aplikacji zawsze będą mogły być wyświetlane w kalendarzu.
Liczba przypomnień Maksymalna liczba przypomnień, które można wyzwolić dla wydarzenia.
Interwał przypomnień Czas przypomnienia.
Jednostka przypomnień Jednostka przypomnienia określająca interwał przypomnienia w minutach, godzinach lub dniach.
Utworzono w Przechowuje datę i godzinę utworzenia wydarzenia.
Aktualizacja o Przechowuje datę i godzinę aktualizacji wydarzenia.
Zaplanowane na Przechowuje datę i godzinę w Kalendarzu.
Wyzwolone w Przechowuje datę i godzinę uruchomienia zdarzenia.
Treść Kolumna używana do przechowywania treści wydarzenia.

Używa kolumny Aktywny aby określić, czy wydarzenie wygenerowane przez użytkownika może być wyświetlane w kalendarzu. System flaga może służyć do oznaczania zdarzeń generowanych przez aplikację. Wydarzenia generowane przez aplikację mogą być zawsze wyświetlane w kalendarzu. Kolumny Identyfikator źródła i Typ źródła może służyć do identyfikowania innych tabel lub jednostek powiązanych ze zdarzeniem. Kolumna Wyzwolone w przechowuje datę i godzinę ostatniego wyzwolenia zdarzenia. Tabela zdarzeń z odpowiednimi ograniczeniami jest pokazana poniżej.

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 szablonów wydarzeń

W tej sekcji zaprojektujemy Tabelę szablonów zdarzeń używane do generowania treści wydarzenia. Aplikacja może dodatkowo użyć odpowiedniego systemu szablonów do przeanalizowania szablonu w celu wygenerowania treści zdarzenia. Poniżej wymieniono opis wszystkich kolumn tabeli szablonów zdarzeń.

Identyfikator Unikalny identyfikator do identyfikacji szablonu wydarzenia.
Tytuł Tytuł szablonu.
Opis Opis szablonu.
Wpisz Typ do klasyfikacji szablonów.
Typ źródła Typ źródła do klasyfikacji szablonów zgodnie z typem źródła.
Utworzono w Przechowuje datę i godzinę utworzenia szablonu.
Aktualizacja o Przechowuje datę i godzinę aktualizacji szablonu.
Treść Kolumna używana do przechowywania treści szablonu.

Tabela szablonów zdarzeń z odpowiednimi ograniczeniami jest pokazana poniżej.

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 przypomnień

Potrzebujemy również tabeli do przechowywania przypomnień wywołanych przez zdarzenia aktywne lub systemowe. Ta sekcja zawiera tabelę i kolumny wymagane do zarządzania przypomnieniami. Poniżej znajduje się opis wszystkich kolumn Tabeli przypomnień.

Identyfikator Unikalny identyfikator identyfikujący przypomnienie.
Identyfikator zdarzenia Identyfikator wydarzenia identyfikujący wydarzenie powiązane z przypomnieniem.
Identyfikator użytkownika Identyfikator użytkownika do identyfikacji użytkownika powiązanego z przypomnieniem.
Czytaj Flaga oznaczająca przypomnienie jako przeczytane/nieprzeczytane.
Kosz Flaga oznaczająca przypomnienie jako kosz.
Utworzono w Przechowuje datę i godzinę utworzenia przypomnienia.
Aktualizacja o Przechowuje datę i godzinę aktualizacji przypomnienia.
Treść Wiadomość z przypomnieniem.

Tabela przypomnień z odpowiednimi ograniczeniami jest pokazana poniżej.

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;

Ulepszenia

Możemy również zarządzać zdarzeniami grupowymi przy użyciu tego samego schematu bazy danych. Można to zrobić, dodając flagę grupy do tabeli wydarzenia, a do zarządzania uczestnikami wydarzenia grupowego wymagana jest nowa tabela.

Podsumowanie

W tym samouczku omówiliśmy projekt bazy danych systemu kalendarza do przechowywania zdarzeń użytkownika i przypomnień. Zapewnił również projekt bazy danych do zarządzania zdarzeniami użytkownika wywoływanymi przez systemy lub aplikację.

Możesz przesłać swoje uwagi, aby dołączyć do dyskusji. Możesz być również zainteresowany zaprojektowaniem bazy danych aplikacji Blog oraz Poll &Survey. Pełny schemat bazy danych jest również dostępny na GitHub.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaktualizuj kolumnę w MySQL

  2. Używanie mysql concat() w klauzuli WHERE?

  3. Błąd wyszukiwania pełnotekstowego mysql

  4. Wstawianie danych za pomocą mysqli

  5. Czy MySQL FIND_IN_SET lub odpowiednik może używać indeksów?