Ce tutoriel fournit les étapes complètes pour concevoir un schéma de base de données du système de newsletter pour gérer les utilisateurs, les newsletters, les abonnés et les listes de diffusion. Il peut être encore amélioré et utilisé pour développer une plate-forme de marketing par e-mail pour fournir des services de newsletter. La même architecture ou schéma de base de données peut être utilisé comme référence pour gérer les newsletters en ligne ou pour distribuer les copies papier des newsletters et des magazines. Il peut également être utilisé par les agences de marketing numérique pour gérer leurs prospects et leurs campagnes marketing.
Le diagramme de relation d'entité ou la conception visuelle de la base de données est illustré ci-dessous.
Conception de la base de données de la newsletter
Remarques :La base de données peut être encore améliorée en ajoutant les tables de contrôle d'accès basé sur les rôles (RBAC). La sécurité peut être gérée en suivant la base de données RBAC dans MySql. De plus, il n'inclut pas les tables requises pour la facturation des clients. Vous pouvez vous référer à la base de données du panier d'achat en ligne dans MySQL pour dériver les tables nécessaires à la gestion des commandes.
Vous pouvez également consulter les didacticiels populaires, notamment Comment installer MySQL 8 sur Ubuntu 20.04 LTS, Comment installer MySQL 8 sur Windows, Comment installer MySQL Workbench sur Ubuntu, Comment installer MySQL 8 avec Workbench sur Windows 10, Base de données RBAC dans MySql, Base de données de blogs dans MySql, base de données de quiz dans MySQL, base de données de sondages et d'enquêtes dans MySQL, base de données de paniers d'achat en ligne dans MySQL et apprentissage des requêtes SQL de base dans MySQL.
Base de données des newsletters
La toute première étape consiste à créer la base de données de la newsletter. Il peut être créé à l'aide de la requête comme indiqué ci-dessous.
CREATE SCHEMA `newsletter` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
J'ai utilisé le jeu de caractères utf8mb4 pour prendre en charge un large éventail de caractères.
Tableau des utilisateurs
Dans cette section, nous allons concevoir la table des utilisateurs pour stocker les informations de l'utilisateur. Le même tableau peut être utilisé pour gérer différents types d'utilisateurs, y compris les administrateurs et les clients. Il peut également être utilisé pour se rapporter aux gestionnaires de newsletter. Les utilisateurs peuvent suivre leurs propres newsletters et listes de diffusion. Vous trouverez ci-dessous la description de toutes les colonnes de la table des utilisateurs.
Identifiant | L'identifiant unique pour identifier l'utilisateur. |
Prénom | Le prénom de l'utilisateur. |
Deuxième prénom | Le deuxième prénom de l'utilisateur. |
Nom de famille | Le nom de famille de l'utilisateur. |
Mobile | Le numéro de portable de l'utilisateur. Il peut être utilisé à des fins de connexion et d'enregistrement. |
L'adresse e-mail de l'utilisateur. Il peut être utilisé à des fins de connexion et d'enregistrement. | |
Hachage du mot de passe | Le hachage du mot de passe généré par l'algorithme approprié. Nous devons éviter de stocker des mots de passe simples ou cryptés. |
Administrateur | L'indicateur pour identifier si l'utilisateur est un administrateur. Ce n'est pas obligatoire si les tables RBAC sont créées en suivant la conception de la base de données RBAC. |
Client | Le drapeau pour identifier si l'utilisateur enregistré peut gérer les newsletters et les abonnés. Ce n'est pas obligatoire si les tables RBAC sont créées en suivant la conception de la base de données RBAC. |
Enregistré à | Cette colonne peut être utilisée pour calculer la durée de vie de l'utilisateur avec l'application. |
Dernière connexion | Il peut être utilisé pour identifier la dernière connexion de l'utilisateur. |
Introduction | La brève présentation de l'utilisateur. |
Profil | Coordonnées client. |
La table utilisateur avec les contraintes appropriées est illustrée ci-dessous.
CREATE TABLE `newsletter`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50 ) NULL PAR DÉFAUT NULL,
`lastName` VARCHAR(50) NULL PAR DÉFAUT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NON NULL,
`admin` TINYINT(1) NON NULL PAR DÉFAUT 0,
`client` TINYINT(1) NON NULL PAR DÉFAUT 0,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`) ,
INDEX UNIQUE `uq_mobile` (`mobile` ASC),
INDEX UNIQUE `uq_email` (`email` ASC) );
Tableau des newsletters
Dans cette section, nous allons concevoir le tableau de la newsletter pour stocker les données de la newsletter. Vous trouverez ci-dessous la description de toutes les colonnes du tableau Newsletter.
Identifiant | L'identifiant unique pour identifier la newsletter. |
Identifiant utilisateur | L'identifiant d'utilisateur pour identifier l'administrateur ou le client. |
Titre | Le titre de la newsletter pour identifier la newsletter. |
Description | La description de la newsletter. |
Type | Le type permettant de distinguer les différents types de newsletter. |
Plusieurs | Le drapeau pour indiquer si la newsletter sera envoyée une ou plusieurs fois. |
Global | Le drapeau pour indiquer si la Newsletter sera envoyée à tous les abonnés. |
Statut | Il peut être utilisé pour identifier le statut. Le statut possible de la newsletter inclut Nouveau, Prêt, Publié. |
Créé à | Il stocke la date et l'heure auxquelles la newsletter est créée. |
Mis à jour à | Il stocke la date et l'heure auxquelles la newsletter est mise à jour. |
Publié à | Il stocke la date et l'heure auxquelles la newsletter est publiée. |
Contenu | La colonne utilisée pour stocker le contenu de la newsletter si l'indicateur multiple est défini sur faux. |
Il utilise la colonne multiple pour identifier si la newsletter est prévue pour être envoyée une seule fois ou plusieurs fois. Le contenu de la newsletter peut être stocké dans la colonne de contenu au cas où il n'est prévu de l'envoyer qu'une seule fois. Dans le cas où l'indicateur multiple est défini sur vrai, la table d'édition doit être utilisée pour stocker le contenu de chaque édition. Le tableau Newsletter avec les contraintes appropriées est illustré ci-dessous.
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,
CLÉ PRIMAIRE (`id`),
INDEX `idx_newsletter_user` (`userId` ASC),
CONTRAINTE `fk_newsletter_user`
CLÉ ÉTRANGÈRE (`userId`)
RÉFÉRENCES `newsletter`.`user` (`id`)
ON DELETE NO ACTION
SUR LA MISE À JOUR AUCUNE ACTION );
Méta newsletter
La méta-table de la newsletter peut être utilisée pour stocker des informations supplémentaires sur les newsletters, y compris l'URL de la bannière de la newsletter, etc. Vous trouverez ci-dessous la description de toutes les colonnes de la méta-table de la newsletter.
Identifiant | L'identifiant unique pour identifier la méta de la newsletter. |
Identifiant de la newsletter | L'identifiant de la newsletter pour identifier la newsletter parente. |
Type | Le type de catégorisation des métadonnées. |
Clé | La clé identifiant la méta. |
Contenu | La colonne utilisée pour stocker les métadonnées de la newsletter. |
La méta-table de la newsletter avec les contraintes appropriées est illustrée ci-dessous.
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,
CLÉ PRIMAIRE (`id`),
INDEX `idx_meta_newsletter` (`newsletterId` ASC),
INDEX UNIQUE `uq_pnewsletter_meta` (`newsletterId` ASC, `key` ASC),
CONTRAINTE `fk_meta_newsletter`
CLÉ ÉTRANGÈRE (`newsletterId`)
RÉFÉRENCES `newsletter `.`newsletter` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE =InnoDB;
Tableau des éditions
Dans cette section, nous allons concevoir la table d'édition pour stocker les éditions de newsletter requises pour les newsletters avec plusieurs indicateurs définis sur true. Vous trouverez ci-dessous la description de toutes les colonnes du tableau d'édition.
Identifiant | L'identifiant unique pour identifier l'édition. |
Identifiant de la newsletter | L'identifiant de la newsletter pour identifier la newsletter parente. |
Titre | Le titre de l'édition. |
Description | La description de l'édition. |
Statut | Il peut être utilisé pour identifier le statut. Le statut possible de l'édition inclut Nouveau, Prêt, Publié. |
Créé à | Il stocke la date et l'heure auxquelles l'édition a été créée. |
Mis à jour à | Il stocke la date et l'heure auxquelles l'édition a été mise à jour. |
Publié à | Il stocke la date et l'heure auxquelles l'édition a été publiée. |
Contenu | La colonne utilisée pour stocker le contenu de l'édition. |
La table d'édition avec les contraintes appropriées est illustrée ci-dessous.
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,
CLÉ PRIMAIRE (`id`),
INDEX `idx_edition_newsletter` (` newsletterId` ASC),
CONTRAINTE `fk_edition_newsletter`
CLÉ ÉTRANGÈRE (`newsletterId`)
RÉFÉRENCES `newsletter`.`newsletter` (`id`)
ON DELETE NO ACTION
SUR LA MISE À JOUR AUCUNE ACTION );
Tableau des abonnés
Dans cette section, nous allons concevoir l'abonné Tableau pour stocker les détails de l'abonné. La table des abonnés peut être utilisée pour déclencher directement des newsletters globales. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des abonnés.
Identifiant | L'identifiant unique pour identifier l'abonné. |
Identifiant client | L'identifiant client pour identifier le client. Il s'agit d'un champ facultatif et obligatoire uniquement si l'application est conçue pour gérer les clients et leurs newsletters. Les clients peuvent gérer leurs propres abonnés. |
Prénom | Le prénom de l'abonné. |
Deuxième prénom | Le deuxième prénom de l'abonné. |
Nom de famille | Le nom de famille de l'abonné. |
L'adresse e-mail de l'abonné. | |
Mobile | Le numéro de portable de l'abonné. |
Téléphone | Le numéro de téléphone de l'abonné. |
Actif | L'indicateur pour identifier si l'abonné est actif. |
Créé à | Il stocke la date et l'heure auxquelles l'abonné est enregistré. |
Mis à jour à | Il stocke la date et l'heure auxquelles l'abonné est mis à jour. |
La table des abonnés avec les contraintes appropriées est illustrée ci-dessous.
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,
CLÉ PRIMAIRE (`id`),
INDEX `idx_subscriber_customer` (`customerId` ASC),
CONTRAINTE `fk_subscriber_customer`
CLÉ ÉTRANGÈRE (`customerId`)
RÉFÉRENCES `newsletter`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `newsletter`.`subscriber` ADD UNIQUE `uq_sub_cust_email`(`customerId`, `email`);
Tableau d'adresses
Dans cette section, nous allons concevoir la table d'adresses pour stocker l'adresse du client et de l'abonné. L'adresse peut être utilisée pour la livraison physique de la Newsletter. Vous trouverez ci-dessous la description de toutes les colonnes de la table d'adresses.
Identifiant | L'identifiant unique pour identifier l'adresse. |
Identifiant utilisateur | L'identifiant de l'utilisateur pour identifier l'utilisateur associé à l'adresse. |
Identifiant de l'abonné | L'identifiant de l'abonné pour identifier l'abonné associé à l'adresse. |
Prénom | Le prénom utilisé pour l'adresse. Il peut être dérivé de l'utilisateur ou de l'abonné correspondant. |
Deuxième prénom | Le deuxième prénom utilisé pour l'adresse. Il peut être dérivé de l'utilisateur ou de l'abonné correspondant. |
Nom de famille | Le nom de famille utilisé pour l'adresse. Il peut être dérivé de l'utilisateur ou de l'abonné correspondant. |
Mobile | Le mobile utilisé pour l'adresse. Il peut être dérivé de l'utilisateur ou de l'abonné correspondant. |
L'e-mail utilisé pour l'adresse. Il peut être dérivé de l'utilisateur ou de l'abonné correspondant. | |
Ligne 1 | La première ligne pour stocker l'adresse. |
Ligne 2 | La deuxième ligne pour stocker l'adresse. |
Ville | La ville de l'adresse. |
Province | La province de l'adresse. |
Pays | Le pays de l'adresse. |
Indicatif régional | L'indicatif régional pour identifier la zone de livraison. |
Créé à | Il stocke la date et l'heure auxquelles l'adresse est créée. |
Mis à jour à | Il stocke la date et l'heure auxquelles l'adresse est mise à jour. |
La table d'adresses avec les contraintes appropriées est illustrée ci-dessous.
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 PAR DÉFAUT NULL,
`line2` VARCHAR(50) NULL PAR DÉFAUT NULL,
`ville` 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,
CLÉ PRIMAIRE (`id`),
INDEX `idx_address_user` (`userId` ASC),
CONTRAINTE `fk_address_user`
CLÉ ÉTRANGÈRE (`userId`)
RÉFÉRENCES `newsletter`.`user` (`id`)
SUR SUPPRESSION AUCUNE ACTION
SUR MISE À JOUR PAS D'ACTION);
ALTER TABLE `newsletter`.`address`
AJOUTER L'INDEX `idx_address_subscriber` (`subscriberId` ASC);
ALTER TABLE `newsletter`.`address`
AJOUTER UNE CONTRAINTE `fk_address_subscriber`
CLÉ ÉTRANGÈRE (`subscriberId`)
RÉFÉRENCES `newsletter`.`subscriber` (`id`)
ON DELETE NO ACTION
ON MISE À JOUR AUCUNE ACTION ;
Tableau des listes de diffusion
Dans cette section, nous allons concevoir le tableau de la liste de diffusion pour stocker les listes de diffusion de newsletters spécifiques. La liste de diffusion peut être utilisée pour déclencher les newsletters non globales. La table des abonnés peut être utilisée pour déclencher des newsletters globales. Vous trouverez ci-dessous la description de toutes les colonnes du tableau de la liste de diffusion.
Identifiant | L'identifiant unique pour identifier l'abonnement à la newsletter. |
Identifiant de la newsletter | L'identifiant de la newsletter pour identifier la newsletter associée à l'abonnement à la newsletter. |
Identifiant de l'abonné | L'identifiant de l'abonné pour identifier l'abonné associé à l'abonnement à la newsletter. |
Actif | L'indicateur pour identifier si l'abonnement à la newsletter est actif. |
Créé à | Il stocke la date et l'heure auxquelles l'abonnement est créé. |
Mis à jour à | Il stocke la date et l'heure auxquelles l'abonnement est mis à jour. |
Le tableau de la liste de diffusion avec les contraintes appropriées est illustré ci-dessous.
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,
CLÉ PRIMAIRE (`id`),
INDEX `idx_mlist_newsletter` (`newsletterId` ASC),
CONTRAINTE `fk_mlist_newsletter`
CLÉ ÉTRANGÈRE (`newsletterId`)
RÉFÉRENCES `newsletter`.`newsletter` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `newsletter`.`mailing_list`
AJOUTER INDEX `idx_mlist_subscriber` (`subscriberId` ASC);
ALTER TABLE `newsletter`.`mailing_list`
AJOUTER UNE CONTRAINTE `fk_mlist_subscriber`
CLÉ ÉTRANGÈRE (`subscriberId`)
RÉFÉRENCES `newsletter`.`subscriber` (`id`)
SUR LA SUPPRESSION AUCUNE ACTION
SUR LA MISE À JOUR AUCUNE ACTION ;
Tableau déclencheur de la newsletter
Nous avons également besoin d'un tableau pour suivre la livraison de la newsletter. Cette section fournit le tableau et les colonnes nécessaires pour suivre la livraison de la newsletter à l'abonné. Vous trouverez ci-dessous la description de toutes les colonnes du tableau de déclenchement de la newsletter.
Identifiant | L'identifiant unique pour identifier le déclencheur de la newsletter. |
Identifiant de la newsletter | L'identifiant de la newsletter pour identifier la newsletter associée au déclencheur. |
Identifiant d'édition | L'identifiant de l'édition pour identifier l'édition de la newsletter associée au déclencheur. |
Identifiant de l'abonné | L'identifiant de l'abonné pour identifier l'abonné associé au déclencheur. |
Envoyé | Le drapeau pour vérifier si la newsletter a été envoyée à l'abonné. |
Livré | L'indicateur pour vérifier si la newsletter a été livrée à l'abonné. |
Mode | Le mode de livraison de la newsletter peut être en ligne ou hors ligne. |
Créé à | Il stocke la date et l'heure auxquelles le déclencheur est créé. |
Mis à jour à | Il stocke la date et l'heure auxquelles le déclencheur est mis à jour. |
Envoyé à | Il stocke la date et l'heure auxquelles le déclencheur a été traité. |
Livré à | Il stocke la date et l'heure auxquelles la newsletter a été envoyée. |
La table de déclenchement de la newsletter avec les contraintes appropriées est illustrée ci-dessous.
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 PAR DÉFAUT NULL,
CLÉ PRIMAIRE (`id`),
INDEX `idx_trigger_newsletter` (`newsletterId` ASC),
CONTRAINTE `fk_trigger_newsletter`
CLÉ ÉTRANGÈRE (`newsletterId`)
RÉFÉRENCES `newsletter`.`newsletter` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `newsletter`.` newsletter_trigger`
AJOUTER INDEX `idx_trigger_edition` (`editionId` ASC);
ALTER TABLE `newsletter`.`newsletter_trigger`
AJOUTER CONST RAINT `fk_trigger_edition`
CLÉ ÉTRANGÈRE (`editionId`)
RÉFÉRENCES `newsletter`.`edition` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `newsletter`.`newsletter_trigger`
AJOUTER L'INDEX `idx_trigger_subscriber` (`subscriberId` ASC);
ALTER TABLE `newsletter`.`newsletter_trigger`
AJOUTER CONTRAINTE `fk_trigger_subscriber`
CLÉ ÉTRANGÈRE (`subscriberId`)
RÉFÉRENCES `newsletter`.`subscriber` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Résumé
Dans ce didacticiel, nous avons discuté de la conception de la base de données d'un système de newsletter pour stocker les utilisateurs et gérer les newsletters. Il a également fourni la conception de la base de données pour gérer les abonnés et les listes de diffusion.
Vous pouvez soumettre vos commentaires pour participer à la discussion. Vous pouvez également être intéressé par la conception de la base de données des applications Blog et Poll &Survey. Le schéma complet de la base de données est également disponible sur GitHub.