Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Leitfaden zum Entwerfen einer Datenbank für Newsletter in MySQL

Dieses Tutorial enthält die vollständigen Schritte zum Entwerfen eines Datenbankschemas des Newsletter-Systems zum Verwalten der Benutzer, Newsletter, Abonnenten und Mailinglisten. Es kann weiter verbessert und verwendet werden, um eine E-Mail-basierte Marketingplattform zur Bereitstellung von Newsletter-Diensten zu entwickeln. Dieselbe Datenbankarchitektur oder dasselbe Schema kann als Referenz verwendet werden, um Online-Newsletter zu verwalten oder die gedruckten Exemplare der Newsletter und Zeitschriften zu verteilen. Es kann auch von Agenturen für digitales Marketing verwendet werden, um ihre Leads und Marketingkampagnen zu verwalten.

Das Entity-Relationship-Diagramm oder visuelle Datenbankdesign ist unten dargestellt.

Design der Newsletter-Datenbank

Notizen :Die Datenbank kann durch Hinzufügen der rollenbasierten Zugriffssteuerungstabellen (RBAC) weiter verbessert werden. Die Sicherheit kann durch Befolgen der RBAC-Datenbank in MySql gehandhabt werden. Außerdem sind die für die Kundenabrechnung erforderlichen Tabellen nicht enthalten. Sie können sich auf die Online-Warenkorb-Datenbank in MySQL beziehen, um die für die Verwaltung der Bestellungen erforderlichen Tabellen abzuleiten.

Sie können auch die beliebten Tutorials besuchen, darunter So installieren Sie MySQL 8 unter Ubuntu 20.04 LTS, So installieren Sie MySQL 8 unter Windows, So installieren Sie MySQL Workbench unter Ubuntu, So installieren Sie MySQL 8 mit Workbench unter Windows 10, RBAC-Datenbank in MySql, Blog-Datenbank in MySQL, Quiz-Datenbank in MySQL, Datenbank für Umfragen und Umfragen in MySQL, Online-Warenkorb-Datenbank in MySQL und Lernen Sie grundlegende SQL-Abfragen in MySQL.

Newsletter-Datenbank

Der allererste Schritt ist die Erstellung der Newsletter-Datenbank. Es kann mit der unten gezeigten Abfrage erstellt werden.

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

Ich habe den Zeichensatz utf8mb4 verwendet um eine Vielzahl von Zeichen zu unterstützen.

Benutzertabelle

In diesem Abschnitt entwerfen wir die Benutzertabelle Benutzerinformationen zu speichern. Dieselbe Tabelle kann verwendet werden, um verschiedene Arten von Benutzern zu verwalten, einschließlich Administratoren und Kunden. Es kann auch verwendet werden, um sich auf die Newsletter-Manager zu beziehen. Benutzer können ihre eigenen Newsletter und Mailinglisten verfolgen. Nachfolgend finden Sie die Beschreibung aller Spalten der Benutzertabelle.

ID Die eindeutige ID zur Identifizierung des Benutzers.
Vorname Der Vorname des Benutzers.
Zweiter Vorname Der zweite Vorname des Benutzers.
Nachname Der Nachname des Benutzers.
Mobil Die Mobiltelefonnummer des Benutzers. Es kann für Anmelde- und Registrierungszwecke verwendet werden.
E-Mail Die E-Mail des Benutzers. Es kann für Anmelde- und Registrierungszwecke verwendet werden.
Passwort-Hash Der vom entsprechenden Algorithmus generierte Passwort-Hash. Wir müssen vermeiden, einfache oder verschlüsselte Passwörter zu speichern.
Administrator Das Flag zur Identifizierung, ob der Benutzer ein Administrator ist. Es ist nicht erforderlich, wenn RBAC-Tabellen gemäß dem RBAC-Datenbankdesign erstellt werden.
Kunde Das Flag, um zu identifizieren, ob der registrierte Benutzer die Newsletter und Abonnenten verwalten kann. Es ist nicht erforderlich, wenn RBAC-Tabellen gemäß dem RBAC-Datenbankdesign erstellt werden.
Registriert unter Diese Spalte kann verwendet werden, um die Lebensdauer des Benutzers mit der Anwendung zu berechnen.
Letzte Anmeldung Es kann verwendet werden, um die letzte Anmeldung des Benutzers zu identifizieren.
Einführung Die kurze Einführung des Benutzers.
Profil Kundendaten.

Die Benutzertabelle mit den entsprechenden Einschränkungen wird unten angezeigt.

CREATE TABLE `newsletter`.`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,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`admin` TINYINT(1) NOT NULL DEFAULT 0,
`customer` TINYINT(1) NOT NULL DEFAULT 0,
`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_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );

Newsletter-Tabelle

In diesem Abschnitt entwerfen wir die Newsletter-Tabelle um die Newsletter-Daten zu speichern. Nachfolgend finden Sie die Beschreibung aller Spalten der Newsletter-Tabelle.

ID Die eindeutige ID zur Identifizierung des Newsletters.
Benutzer-ID Die Benutzer-ID zur Identifizierung des Administrators oder Kunden.
Titel Der Newsletter-Titel zur Identifizierung des Newsletters.
Beschreibung Die Newsletter-Beschreibung.
Typ Der Typ, um zwischen den verschiedenen Newsletter-Typen zu unterscheiden.
Mehrere Das Flag, um zu markieren, ob der Newsletter einmal oder mehrmals versendet wird.
Weltweit Das Flag, um zu markieren, ob der Newsletter an alle Abonnenten gesendet wird.
Status Es kann verwendet werden, um den Status zu identifizieren. Der mögliche Status des Newsletters umfasst Neu, Bereit, Veröffentlicht.
Erstellt am Datum und Uhrzeit der Erstellung des Newsletters werden gespeichert.
Aktualisiert um Es speichert Datum und Uhrzeit der Aktualisierung des Newsletters.
Veröffentlicht unter Datum und Uhrzeit der Veröffentlichung des Newsletters werden gespeichert.
Inhalt Die Spalte, in der der Inhalt des Newsletters gespeichert wird, wenn das Mehrfach-Flag auf „false“ gesetzt ist.

Anhand der Spalte mehrfach erkennt er, ob der Newsletter nur einmal oder mehrfach versendet werden soll. Der Inhalt des Newsletters kann in der Inhaltsspalte gespeichert werden, falls nur ein einmaliger Versand geplant ist. Falls das Mehrfach-Flag auf wahr gesetzt ist, muss die Editionstabelle verwendet werden, um den Inhalt jeder Edition zu speichern. Die Newsletter-Tabelle mit den entsprechenden Einschränkungen ist wie unten gezeigt.

CREATE TABLE `newsletter`.`newsletter` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`descritpion` VARCHAR(2048) NULL DEFAULT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`multiple` TINYINT(1) NOT NULL DEFAULT 0,
`global` TINYINT(1) NOT NULL DEFAULT 0,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_newsletter_user` (`userId` ASC),
CONSTRAINT `fk_newsletter_user`
FOREIGN KEY (`userId`)
REFERENCES `newsletter`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Newsletter-Meta

Die Newsletter-Metatabelle kann verwendet werden, um zusätzliche Informationen über Newsletter zu speichern, einschließlich der Newsletter-Banner-URL usw. Nachfolgend finden Sie die Beschreibung aller Spalten der Newsletter-Metatabelle.

ID Die eindeutige ID zur Identifizierung des Newsletter-Metas.
Newsletter-ID Die Newsletter-ID zur Identifizierung des übergeordneten Newsletters.
Typ Der Typ zum Kategorisieren der Metadaten.
Schlüssel Der Schlüssel, der das Meta identifiziert.
Inhalt Die Spalte, in der die Newsletter-Metadaten gespeichert werden.

Die Newsletter-Metatabelle mit den entsprechenden Beschränkungen ist unten dargestellt.

CREATE TABLE `newsletter`.`newsletter_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`newsletterId` BIGINT NOT NULL,
`type` VARCHAR(50) NOT NULL,
`key` VARCHAR(160) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_newsletter` (`newsletterId` ASC),
UNIQUE INDEX `uq_pnewsletter_meta` (`newsletterId` ASC, `key` ASC),
CONSTRAINT `fk_meta_newsletter`
FOREIGN KEY (`newsletterId`)
REFERENCES `newsletter`.`newsletter` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Ausgabentabelle

In diesem Abschnitt entwerfen wir die Ausgabetabelle um die für Newsletter erforderlichen Newsletter-Ausgaben zu speichern, bei denen das Mehrfach-Flag auf "true" gesetzt ist. Nachfolgend finden Sie die Beschreibung aller Spalten der Editionstabelle.

ID Die eindeutige ID zur Identifizierung der Ausgabe.
Newsletter-ID Die Newsletter-ID zur Identifizierung des übergeordneten Newsletters.
Titel Der Titel der Ausgabe.
Beschreibung Die Editionsbeschreibung.
Status Es kann verwendet werden, um den Status zu identifizieren. Der mögliche Status der Ausgabe umfasst Neu, Bereit, Veröffentlicht.
Erstellt am Es speichert das Datum und die Uhrzeit, zu der die Ausgabe erstellt wurde.
Aktualisiert um Datum und Uhrzeit der Aktualisierung der Ausgabe werden gespeichert.
Veröffentlicht unter Er speichert Datum und Uhrzeit der Veröffentlichung der Ausgabe.
Inhalt Die Spalte, in der der Editionsinhalt gespeichert wird.

Die Editionstabelle mit den entsprechenden Einschränkungen ist unten dargestellt.

CREATE TABLE `newsletter`.`edition` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`newsletterId` BIGINT NOT NULL,
`title` VARCHAR(100) NOT NULL,
`description` VARCHAR(2048) NULL DEFAULT NULL,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_edition_newsletter` (`newsletterId` ASC),
CONSTRAINT `fk_edition_newsletter`
FOREIGN KEY (`newsletterId`)
REFERENCES `newsletter`.`newsletter` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Abonnententabelle

In diesem Abschnitt entwerfen wir den Abonnenten Tabelle um die Abonnentendaten zu speichern. Über die Abonnententabelle können globale Newsletter direkt ausgelöst werden. Unten erwähnt ist die Beschreibung aller Spalten der Abonnententabelle.

ID Die eindeutige ID zur Identifizierung des Abonnenten.
Kundennummer Die Kunden-ID zur Identifizierung des Kunden. Es ist ein optionales Feld und nur erforderlich, wenn die Anwendung die Kunden und ihre Newsletter verwalten soll. Kunden können ihre eigenen Abonnenten verwalten.
Vorname Der Vorname des Abonnenten.
Zweiter Vorname Der zweite Vorname des Abonnenten.
Nachname Der Nachname des Abonnenten.
E-Mail Die E-Mail des Abonnenten.
Mobil Die Handynummer des Abonnenten.
Telefon Die Telefonnummer des Abonnenten.
Aktiv Das Flag, um zu identifizieren, ob der Abonnent aktiv ist.
Erstellt am Es speichert Datum und Uhrzeit der Anmeldung des Abonnenten.
Aktualisiert um Datum und Uhrzeit der Aktualisierung des Abonnenten werden gespeichert.

Die Abonnententabelle mit den entsprechenden Beschränkungen ist wie unten gezeigt.

CREATE TABLE `newsletter`.`subscriber` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`customerId` BIGINT DEFAULT NULL,
`firstName` VARCHAR(100) NOT NULL,
`middleName` VARCHAR(100) NULL DEFAULT NULL,
`lastName` VARCHAR(100) NULL DEFAULT NULL,
`email` VARCHAR(100) NOT NULL,
`mobile` VARCHAR(50) NULL DEFAULT NULL,
`phone` VARCHAR(50) NULL DEFAULT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 1,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_subscriber_customer` (`customerId` ASC),
CONSTRAINT `fk_subscriber_customer`
FOREIGN KEY (`customerId`)
REFERENCES `newsletter`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `newsletter`.`subscriber` ADD UNIQUE `uq_sub_cust_email`(`customerId`, `email`);

Adresstabelle

In diesem Abschnitt entwerfen wir die Adresstabelle zur Speicherung der Kunden- und Teilnehmeradresse. Die Adresse kann für die physische Zustellung des Newsletters verwendet werden. Unten erwähnt ist die Beschreibung aller Spalten der Adresstabelle.

ID Die eindeutige ID zur Identifizierung der Adresse.
Benutzer-ID Die Benutzer-ID zur Identifizierung des mit der Adresse verknüpften Benutzers.
Abonnenten-ID Die Abonnenten-ID zur Identifizierung des mit der Adresse verknüpften Abonnenten.
Vorname Der für die Adresse verwendete Vorname. Sie kann vom entsprechenden Benutzer oder Abonnenten abgeleitet werden.
Zweiter Vorname Der zweite Vorname, der für die Adresse verwendet wird. Sie kann vom entsprechenden Benutzer oder Abonnenten abgeleitet werden.
Nachname Der für die Adresse verwendete Nachname. Sie kann vom entsprechenden Benutzer oder Abonnenten abgeleitet werden.
Mobil Das für die Adresse verwendete Mobiltelefon. Sie kann vom entsprechenden Benutzer oder Abonnenten abgeleitet werden.
E-Mail Die für die Adresse verwendete E-Mail. Sie kann vom entsprechenden Benutzer oder Abonnenten abgeleitet werden.
Zeile 1 Die erste Zeile zum Speichern der Adresse.
Zeile 2 Die zweite Zeile zum Speichern der Adresse.
Stadt Die Stadt der Adresse.
Provinz Die Provinz der Adresse.
Land Das Land der Adresse.
Vorwahl Die Vorwahl zur Identifizierung des Liefergebiets.
Erstellt am Er speichert das Datum und die Uhrzeit der Erstellung der Adresse.
Aktualisiert um Es speichert Datum und Uhrzeit der Aktualisierung der Adresse.

Die Adresstabelle mit den entsprechenden Einschränkungen sieht unten aus.

CREATE TABLE `newsletter`.`address` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NULL DEFAULT NULL,
`subscriberId` BIGINT NULL DEFAULT NULL,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`line1` VARCHAR(50) NULL DEFAULT NULL,
`line2` VARCHAR(50) NULL DEFAULT NULL,
`city` VARCHAR(50) NULL DEFAULT NULL,
`province` VARCHAR(50) NULL DEFAULT NULL,
`country` VARCHAR(50) NULL DEFAULT NULL,
`areaCode` VARCHAR(50) NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_address_user` (`userId` ASC),
CONSTRAINT `fk_address_user`
FOREIGN KEY (`userId`)
REFERENCES `newsletter`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `newsletter`.`address`
ADD INDEX `idx_address_subscriber` (`subscriberId` ASC);
ALTER TABLE `newsletter`.`address`
ADD CONSTRAINT `fk_address_subscriber`
FOREIGN KEY (`subscriberId`)
REFERENCES `newsletter`.`subscriber` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Mailinglistentabelle

In diesem Abschnitt entwerfen wir die Mailinglistentabelle um die Mailinglisten bestimmter Newsletter zu speichern. Die Mailingliste kann verwendet werden, um die nicht-globalen Newsletter auszulösen. Die Abonnententabelle kann verwendet werden, um globale Newsletter auszulösen. Nachfolgend finden Sie die Beschreibung aller Spalten der Mailinglistentabelle.

ID Die eindeutige ID zur Identifizierung des Newsletter-Abonnements.
Newsletter-ID Die Newsletter-ID zur Identifizierung des Newsletters, der mit dem Newsletter-Abonnement verknüpft ist.
Abonnenten-ID Die Abonnenten-ID zur Identifizierung des Abonnenten, der mit dem Newsletter-Abonnement verknüpft ist.
Aktiv Das Flag, um zu erkennen, ob das Newsletter-Abonnement aktiv ist.
Erstellt am Es speichert Datum und Uhrzeit der Erstellung des Abonnements.
Aktualisiert um Datum und Uhrzeit der Aktualisierung des Abonnements werden gespeichert.

Die Mailinglistentabelle mit den entsprechenden Beschränkungen ist wie unten gezeigt.

CREATE TABLE `newsletter`.`mailing_list` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`newsletterId` BIGINT NOT NULL,
`subscriberId` BIGINT NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 1,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_mlist_newsletter` (`newsletterId` ASC),
CONSTRAINT `fk_mlist_newsletter`
FOREIGN KEY (`newsletterId`)
REFERENCES `newsletter`.`newsletter` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `newsletter`.`mailing_list`
ADD INDEX `idx_mlist_subscriber` (`subscriberId` ASC);
ALTER TABLE `newsletter`.`mailing_list`
ADD CONSTRAINT `fk_mlist_subscriber`
FOREIGN KEY (`subscriberId`)
REFERENCES `newsletter`.`subscriber` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Newsletter-Trigger-Tabelle

Wir benötigen auch eine Tabelle, um die Zustellung des Newsletters zu verfolgen. Dieser Abschnitt enthält die Tabelle und Spalten, die zum Verfolgen der Newsletter-Zustellung an den Abonnenten erforderlich sind. Nachfolgend finden Sie die Beschreibung aller Spalten der Newsletter-Trigger-Tabelle.

ID Die eindeutige ID zur Identifizierung des Newsletter-Auslösers.
Newsletter-ID Die Newsletter-ID zur Identifizierung des mit dem Trigger verknüpften Newsletters.
Ausgaben-ID Die Ausgabe-ID zur Identifizierung der mit dem Trigger verknüpften Newsletter-Ausgabe.
Abonnenten-ID Die Abonnenten-ID zur Identifizierung des mit dem Trigger verknüpften Abonnenten.
Gesendet Das Flag, um zu prüfen, ob der Newsletter an den Abonnenten gesendet wurde.
Geliefert Das Flag, um zu prüfen, ob der Newsletter an den Abonnenten zugestellt wurde.
Modus Der Versandmodus des Newsletters kann entweder online oder offline sein.
Erstellt am Es speichert das Datum und die Uhrzeit, zu der der Trigger erstellt wurde.
Aktualisiert um Datum und Uhrzeit der Aktualisierung des Triggers werden gespeichert.
Gesendet um Es speichert das Datum und die Uhrzeit, zu der der Trigger verarbeitet wurde.
Geliefert um Datum und Uhrzeit der Zustellung des Newsletters werden gespeichert.

Die Newsletter-Trigger-Tabelle mit den entsprechenden Einschränkungen ist unten dargestellt.

CREATE TABLE `newsletter`.`newsletter_trigger` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`newsletterId` BIGINT NOT NULL,
`editionId` BIGINT NULL DEFAULT NULL,
`subscriberId` BIGINT NOT NULL,
`sent` TINYINT(1) NOT NULL DEFAULT 1,
`delivered` TINYINT(1) NOT NULL DEFAULT 1,
`mode` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`sentAt` DATETIME NULL DEFAULT NULL,
`deliveredAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_trigger_newsletter` (`newsletterId` ASC),
CONSTRAINT `fk_trigger_newsletter`
FOREIGN KEY (`newsletterId`)
REFERENCES `newsletter`.`newsletter` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `newsletter`.`newsletter_trigger`
ADD INDEX `idx_trigger_edition` (`editionId` ASC);
ALTER TABLE `newsletter`.`newsletter_trigger`
ADD CONSTRAINT `fk_trigger_edition`
FOREIGN KEY (`editionId`)
REFERENCES `newsletter`.`edition` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `newsletter`.`newsletter_trigger`
ADD INDEX `idx_trigger_subscriber` (`subscriberId` ASC);
ALTER TABLE `newsletter`.`newsletter_trigger`
ADD CONSTRAINT `fk_trigger_subscriber`
FOREIGN KEY (`subscriberId`)
REFERENCES `newsletter`.`subscriber` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Zusammenfassung

In diesem Tutorial haben wir das Datenbankdesign eines Newsletter-Systems besprochen, um die Benutzer zu speichern und die Newsletter zu verwalten. Es stellte auch das Datenbankdesign bereit, um die Abonnenten und Mailinglisten zu verwalten.

Sie können Ihre Kommentare einreichen, um an der Diskussion teilzunehmen. Sie könnten auch daran interessiert sein, die Datenbank der Blog- und Umfrage- und Umfrageanwendungen zu entwerfen. Das vollständige Datenbankschema ist auch auf GitHub verfügbar.