Mysql
 sql >> Base de données >  >> RDS >> Mysql

Guide pour concevoir une base de données pour la newsletter dans MySQL

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.
E-mail 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é.
E-mail 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.
E-mail 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.