sql >> Database teknologi >  >> RDS >> Mysql

Guide til designdatabase til nyhedsbrev i MySQL

Denne vejledning indeholder de komplette trin til at designe et databaseskema for nyhedsbrevssystemet til at administrere brugere, nyhedsbreve, abonnenter og mailinglister. Det kan forbedres yderligere og bruges til at udvikle en e-mail-baseret marketingplatform til at levere nyhedsbrevstjenester. Den samme databasearkitektur eller skema kan bruges som reference til at administrere online nyhedsbreve eller til at distribuere papirkopier af nyhedsbreve og magasiner. Det kan også bruges af digitale marketingbureauer til at administrere deres kundeemner og marketingkampagner.

Entity Relationship Diagram eller visuelle databasedesign er vist nedenfor.

Nyhedsbrev Database Design

Noter :Databasen kan forbedres yderligere ved at tilføje RBAC-tabellerne (Role-Based Access Control). Sikkerheden kan håndteres ved at følge RBAC Database i MySql. Den inkluderer heller ikke de tabeller, der kræves til kundefakturering. Du kan henvise til Online Shopping Cart Database i MySQL for at udlede de tabeller, der er nødvendige for at administrere ordrerne.

Du kan også besøge de populære tutorials, herunder Sådan installeres MySQL 8 på Ubuntu 20.04 LTS, Sådan installeres MySQL 8 på Windows, Sådan installeres MySQL Workbench på Ubuntu, Sådan installeres MySQL 8 med Workbench på Windows 10, RBAC-database i MySql, Blogdatabase i MySQL, Quiz-database i MySQL, afstemnings- og undersøgelsesdatabase i MySQL, Online-indkøbskurvdatabase i MySQL og lær grundlæggende SQL-forespørgsler i MySQL.

Nyhedsbrevsdatabase

Det allerførste skridt er at oprette nyhedsbrevsdatabasen. Den kan oprettes ved hjælp af forespørgslen som vist nedenfor.

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

Jeg har brugt tegnsættet utf8mb4 for at understøtte en bred vifte af tegn.

Brugertabel

I dette afsnit vil vi designe Brugertabellen at gemme brugeroplysninger. Den samme tabel kan bruges til at administrere forskellige typer brugere, herunder administratorer og kunder. Det kan også bruges til at forholde sig til nyhedsbrevscheferne. Brugere kan spore deres egne nyhedsbreve og mailinglister. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i brugertabellen.

Id Det unikke id til at identificere brugeren.
Fornavn Brugerens fornavn.
Mellemnavn Brugerens mellemnavn.
Efternavn Brugerens efternavn.
Mobil Brugerens mobilnummer. Det kan bruges til login og registreringsformål.
E-mail Brugerens e-mail. Det kan bruges til login og registreringsformål.
Password Hash Adgangskodehashen genereret af den passende algoritme. Vi skal undgå at gemme almindelige eller krypterede adgangskoder.
Admin Flaget til at identificere, om brugeren er en administrator. Det er ikke påkrævet, hvis RBAC-tabeller oprettes ved at følge RBAC-databasedesignet.
Kunde Flaget til at identificere, om den registrerede bruger kan administrere nyhedsbreve og abonnenter. Det er ikke påkrævet, hvis RBAC-tabeller oprettes ved at følge RBAC-databasedesignet.
Registreret på Denne kolonne kan bruges til at beregne levetiden for brugeren med applikationen.
Sidste login Det kan bruges til at identificere brugerens sidste login.
Introduktion Den korte introduktion af brugeren.
Profil Kundeoplysninger.

Brugertabellen med de relevante begrænsninger er vist nedenfor.

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) );

Nyhedsbrevstabel

I dette afsnit vil vi designe Nyhedsbrevstabellen at gemme nyhedsbrevsdata. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i nyhedsbrevstabellen.

Id Det unikke id til at identificere nyhedsbrevet.
Bruger-id Bruger-id'et til at identificere administratoren eller kunden.
Titel Nyhedsbrevets titel til at identificere nyhedsbrevet.
Beskrivelse Nyhedsbrevets beskrivelse.
Type Typen til at skelne mellem de forskellige nyhedsbrevstyper.
Flere Flaget til at markere, om nyhedsbrevet skal sendes én eller flere gange.
Global Flaget for at markere, om nyhedsbrevet vil blive sendt til alle abonnenter.
Status Den kan bruges til at identificere status. Den mulige status for nyhedsbrevet inkluderer Ny, Klar, Udgivet.
Oprettet på Det gemmer datoen og klokkeslættet, hvor nyhedsbrevet oprettes.
Opdateret kl. Den gemmer datoen og tidspunktet, hvor nyhedsbrevet opdateres.
Udgivet på Den gemmer datoen og tidspunktet, hvor nyhedsbrevet udgives.
Indhold Kolonnen, der bruges til at gemme nyhedsbrevets indhold, hvis multiple-flaget er sat til falsk.

Den bruger kolonnemultiplen til at identificere, om nyhedsbrevet er planlagt kun at sende én eller flere gange. Nyhedsbrevets indhold kan gemmes i indholdskolonnen, hvis det er planlagt kun at sende én gang. I tilfælde af at flere flag er sat til sand, skal udgavetabellen bruges til at gemme indholdet af hver udgave. Nyhedsbrevstabellen med de relevante begrænsninger er som vist nedenfor.

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);

Nyhedsbrev Meta

Nyhedsbrevet Meta Table kan bruges til at gemme yderligere information om nyhedsbreve, herunder nyhedsbrevets banner URL osv. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Nyhedsbrev Meta Table.

Id Det unikke id til at identificere nyhedsbrevets meta.
Nyhedsbrev-id Nyhedsbrevs-id'et til at identificere det overordnede nyhedsbrev.
Type Typen til at kategorisere metadataene.
Nøgle Nøglen, der identificerer metaen.
Indhold Kolonnen, der bruges til at gemme nyhedsbrevets metadata.

Nyhedsbrevets metatabel med de relevante begrænsninger er som vist nedenfor.

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;

Udgavetabel

I dette afsnit vil vi designe udgavetabellen for at gemme de nyhedsbrevsudgaver, der kræves til nyhedsbreve med flere flag sat til sand. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i udgavetabellen.

Id Det unikke id til at identificere udgaven.
Nyhedsbrev-id Nyhedsbrevs-id'et til at identificere det overordnede nyhedsbrev.
Titel Udgavens titel.
Beskrivelse Udgavebeskrivelsen.
Status Den kan bruges til at identificere status. Den mulige status for udgaven inkluderer Ny, Klar, Udgivet.
Oprettet på Den gemmer datoen og tidspunktet, hvor udgaven blev oprettet.
Opdateret kl. Den gemmer datoen og tidspunktet, hvor udgaven blev opdateret.
Udgivet på Den gemmer datoen og tidspunktet, hvor udgaven blev udgivet.
Indhold Kolonnen, der bruges til at gemme udgavens indhold.

Udgavetabellen med de relevante begrænsninger er som vist nedenfor.

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);

Tabel med abonnenter

I dette afsnit vil vi designe Abonnenten Tabel for at gemme abonnentoplysningerne. Abonnenttabellen kan bruges til direkte at udløse globale nyhedsbreve. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i abonnenttabellen.

Id Det unikke id til at identificere abonnenten.
Kunde-id Kunde-id'et til at identificere kunden. Det er et valgfrit felt og kun påkrævet, hvis applikationen er designet til at administrere kunderne og deres nyhedsbreve. Kunder kan administrere deres egne abonnenter.
Fornavn Abonnentens fornavn.
Mellemnavn Abonnentens mellemnavn.
Efternavn Abonnentens efternavn.
E-mail Abonnentens e-mail.
Mobil Abonnentens mobilnummer.
Telefon Telefonnummeret på abonnenten.
Aktiv Flaget til at identificere, om abonnenten er aktiv.
Oprettet på Det gemmer dato og klokkeslæt, hvor abonnenten er registreret.
Opdateret kl. Den gemmer datoen og tidspunktet, hvor abonnenten opdateres.

Abonnenttabellen med de relevante begrænsninger er som vist nedenfor.

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`);

Adressetabel

I dette afsnit vil vi designe adressetabellen at gemme kunde- og abonnentadressen. Adressen kan bruges til den fysiske udlevering af Nyhedsbrevet. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i adressetabellen.

Id Det unikke id til at identificere adressen.
Bruger-id Bruger-id'et til at identificere den bruger, der er knyttet til adressen.
Abonnent-id Abonnent-id'et til at identificere den abonnent, der er knyttet til adressen.
Fornavn Det fornavn, der bruges til adressen. Det kan afledes fra den tilsvarende bruger eller abonnent.
Mellemnavn Mellemnavnet brugt til adressen. Det kan afledes fra den tilsvarende bruger eller abonnent.
Efternavn Det efternavn, der bruges til adressen. Det kan afledes fra den tilsvarende bruger eller abonnent.
Mobil Mobilen brugt til adressen. Det kan afledes fra den tilsvarende bruger eller abonnent.
E-mail E-mailen brugt til adressen. Det kan afledes fra den tilsvarende bruger eller abonnent.
Linje 1 Den første linje til at gemme adresse.
Linje 2 Den anden linje til at gemme adresse.
By Byen for adressen.
Provins Provins for adressen.
Land Adressens land.
Områdekode Området til at identificere leveringsområdet.
Oprettet på Det gemmer datoen og klokkeslættet, hvor adressen er oprettet.
Opdateret kl. Den gemmer datoen og klokkeslættet, hvor adressen er opdateret.

Adressetabellen med de relevante begrænsninger er som vist nedenfor.

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;

Tabel med postliste

I dette afsnit vil vi designe postlistetabellen at gemme mailinglisterne for specifikke nyhedsbreve. Mailinglisten kan bruges til at udløse de ikke-globale nyhedsbreve. Abonnenttabellen kan bruges til at udløse globale nyhedsbreve. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i postlistetabellen.

Id Det unikke id til at identificere nyhedsbrevsabonnementet.
Nyhedsbrev-id Nyhedsbrevs-id'et til at identificere det nyhedsbrev, der er knyttet til nyhedsbrevsabonnementet.
Abonnent-id Abonnent-id'et til at identificere den abonnent, der er knyttet til nyhedsbrevsabonnementet.
Aktiv Flaget til at identificere, om nyhedsbrevsabonnementet er aktivt.
Oprettet på Det gemmer datoen og klokkeslættet, hvor abonnementet oprettes.
Opdateret kl. Det gemmer datoen og klokkeslættet, hvor abonnementet opdateres.

Postlistetabellen med de relevante begrænsninger er som vist nedenfor.

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;

Tabel med udløsning af nyhedsbrev

Vi har også brug for et bord til at spore levering af nyhedsbreve. Dette afsnit indeholder tabellen og kolonnerne, der kræves for at spore nyhedsbrevets levering til abonnenten. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i nyhedsbrevets triggertabell.

Id Det unikke id til at identificere nyhedsbrevsudløseren.
Nyhedsbrev-id Nyhedsbrevs-id'et til at identificere nyhedsbrevet, der er knyttet til triggeren.
Udgave-id Udgave-id'et til at identificere den nyhedsbrevsudgave, der er knyttet til udløseren.
Abonnent-id Abonnent-id'et til at identificere den abonnent, der er knyttet til triggeren.
Sendt Flaget til at kontrollere, om nyhedsbrevet er sendt til abonnenten.
Leveret Flaget til at kontrollere, om nyhedsbrevet er blevet leveret til abonnenten.
Tilstand Måden for levering af nyhedsbreve kan enten være online eller offline.
Oprettet på Den gemmer datoen og klokkeslættet, hvor triggeren oprettes.
Opdateret kl. Den gemmer datoen og klokkeslættet, hvor triggeren opdateres.
Sendt kl. Den gemmer datoen og klokkeslættet, hvor triggeren blev behandlet.
Leveret kl. Den gemmer datoen og tidspunktet, hvor nyhedsbrevet blev leveret.

Nyhedsbrevets triggertabell med de relevante begrænsninger er som vist nedenfor.

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;

Oversigt

I denne vejledning har vi diskuteret databasedesignet af et nyhedsbrevssystem til at gemme brugerne og administrere nyhedsbrevene. Det gav også databasedesignet til at administrere abonnenter og mailinglister.

Du kan indsende dine kommentarer for at deltage i diskussionen. Du kan også være interesseret i at designe databasen med Blog- og Poll &Survey-applikationerne. Det komplette databaseskema er også tilgængeligt på GitHub.


  1. Hvordan indlæser din Oracle ODBC-driver Oracle-klienten?

  2. Ny udgivelse:Spotlight Tuning Pack 7.1.9

  3. Sådan aktiverer du arkivlogtilstand i Oracle Database 19c

  4. Sådan giver du alle privilegier til root-brugeren i MySQL 8.0