sql >> Database >  >> RDS >> Mysql

Gids voor het ontwerpen van een database voor blogbeheer in MySQL

Deze tutorial biedt volledige stappen voor het ontwerpen van een databaseschema om de gebruikers, blogposts, postmetadata, postcommentaar, postcategorieën en posttags te beheren. Het kan verder worden gebruikt om een ​​blogwebsite of mobiele applicatie te ontwikkelen.

Het entiteitsrelatiediagram of visueel databaseontwerp wordt hieronder weergegeven.

Afb. 1

Opmerkingen :Om het databaseschema eenvoudig te houden en een minimaal levensvatbaar product te ontwikkelen, dekt het niet de meer geavanceerde opties zoals versiebeheer en het beoordelen van de berichten. Het biedt opties om de opmerkingen van de auteurs van het bericht te bekijken om spamming te voorkomen, zodat alleen legitieme opmerkingen worden gepubliceerd en weergegeven op de berichtpagina.

U kunt ook de populaire tutorials bezoeken, waaronder How To Install MySQL 8 on Ubuntu, How To Install MySQL 8 on Windows, RBAC Database in MySql, Poll and Survey Database in MySql, Learn Basic SQL Queries in MySQL.

Blogdatabase

De allereerste stap is het maken van de blogdatabase. Het kan worden gemaakt met behulp van de onderstaande query.

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

Ik heb de tekenset utf8mb4 . gebruikt om een ​​breed scala aan karakters te ondersteunen.

Gebruikerstabel

In deze sectie zullen we de Gebruikerstabel . ontwerpen om gebruikersinformatie van alle postauteurs op te slaan. Dezelfde tabel kan worden gebruikt om de auteurs van berichten te relateren, zodat alle auteurs hun eigen berichten kunnen beheren. Hieronder staat de beschrijving van alle kolommen van de gebruikerstabel.

Id Het unieke ID om de gebruiker te identificeren.
Voornaam De voornaam van de gebruiker.
Middelste naam De middelste naam van de gebruiker.
Achternaam De achternaam van de gebruiker.
Mobiel Het mobiele nummer van de gebruiker. Het kan worden gebruikt voor aanmeldings- en registratiedoeleinden.
E-mail Het e-mailadres van de gebruiker. Het kan worden gebruikt voor aanmeldings- en registratiedoeleinden.
Wachtwoordhash De wachtwoord-hash gegenereerd door het juiste algoritme. We moeten vermijden om gewone wachtwoorden op te slaan.
Geregistreerd bij Deze kolom kan worden gebruikt om de levensduur van de gebruiker met de blog te berekenen.
Laatste aanmelding Het kan worden gebruikt om de laatste login van de gebruiker te identificeren.
Inleiding De korte introductie van de auteur die bij elk bericht moet worden weergegeven.
Profiel De details van de auteur die op de auteurspagina moeten worden weergegeven.

De gebruikerstabel met de juiste beperkingen is zoals hieronder weergegeven.

CREATE TABLE `blog`.`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,
`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) );

Tabel posten

In deze sectie zullen we de Post Table . ontwerpen om de postgegevens op te slaan. Hieronder staat de beschrijving van alle kolommen van de Post Table.

Id Het unieke ID om het bericht te identificeren.
Auteur-ID Het auteur-ID om de auteur van het bericht te identificeren.
Ouder-ID De bovenliggende id om de bovenliggende post te identificeren. Het kan worden gebruikt om de inhoudsopgave van de bovenliggende post van een serie te vormen.
Titel De titel van het bericht die moet worden weergegeven op de berichtpagina en de lijsten.
Metatitel De metatitel die moet worden gebruikt voor browsertitel en SEO.
Naaktslak De post-slug om de URL te vormen.
Samenvatting De samenvatting van het bericht om de belangrijkste hoogtepunten te noemen.
Gepubliceerd Het kan worden gebruikt om te bepalen of het bericht openbaar beschikbaar is.
Gemaakt op Het slaat de datum en tijd op waarop het bericht is gemaakt.
Bijgewerkt om Het slaat de datum en tijd op waarop het bericht is bijgewerkt.
Gepubliceerd op Het slaat de datum en tijd op waarop het bericht is gepubliceerd.
Inhoud De kolom die wordt gebruikt om de berichtgegevens op te slaan.

De Post-tabel met de juiste beperkingen is zoals hieronder weergegeven.

CREATE TABLE `blog`.`post` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`authorId` BIGINT NOT NULL,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`published` TINYINT(1) 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`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_post_user` (`authorId` ASC),
CONSTRAINT `fk_post_user`
FOREIGN KEY (`authorId`)
REFERENCES `blog`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `blog`.`post`
ADD INDEX `idx_post_parent` (`parentId` ASC);
ALTER TABLE `blog`.`post`
ADD CONSTRAINT `fk_post_parent`
FOREIGN KEY (`parentId`)
REFERENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Bericht meta

De Post Meta Table kan worden gebruikt om aanvullende informatie van een post op te slaan, inclusief de post banner URL etc. Hieronder staat de beschrijving van alle kolommen van de Post Meta Table.

Id De unieke id om de post-meta te identificeren.
Bericht-ID De post-ID om de bovenliggende post te identificeren.
Sleutel De sleutel die de meta identificeert.
Inhoud De kolom die wordt gebruikt om de berichtgegevens op te slaan.

De post-metatabel met de juiste beperkingen is zoals hieronder weergegeven.

CREATE TABLE `blog`.`post_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`postId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_post` (`postId` ASC),
UNIQUE INDEX `uq_post_meta` (`postId` ASC, `key` ASC),
CONSTRAINT `fk_meta_post`
FOREIGN KEY (`postId`)
REFERENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Reactietabel plaatsen

In deze sectie zullen we de Post Comment Table . ontwerpen om de berichtopmerkingen op te slaan. Hieronder vindt u de beschrijving van alle kolommen van de tabel met commentaar plaatsen.

Id Het unieke ID om de postcommentaar te identificeren.
Bericht-ID De post-ID om de bovenliggende post te identificeren.
Ouder-ID De ouder-ID om de ouderopmerking te identificeren.
Titel De titel van de reactie.
Gepubliceerd Het kan worden gebruikt om te bepalen of de opmerking openbaar beschikbaar is.
Gemaakt op Het slaat de datum en tijd op waarop de opmerking is ingediend.
Gepubliceerd op Het slaat de datum en tijd op waarop de opmerking is gepubliceerd.
Inhoud De kolom die wordt gebruikt om de commentaargegevens op te slaan.

De tabel met opmerkingen voor plaatsen met de juiste beperkingen is zoals hieronder weergegeven.

CREATE TABLE `blog`.`post_comment` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`postId` BIGINT NOT NULL,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(100) NOT NULL,
`published` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_comment_post` (`postId` ASC),
CONSTRAINT `fk_comment_post`
FOREIGN KEY (`postId`)
REFERENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `blog`.`post_comment`
ADD INDEX `idx_comment_parent` (`parentId` ASC);
ALTER TABLE `blog`.`post_comment`
ADD CONSTRAINT `fk_comment_parent`
FOREIGN KEY (`parentId`)
REFERENCES `blog`.`post_comment` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Categorietabel en berichtcategorietabel

In deze sectie zullen we de Categorietabel . ontwerpen en Bericht categorietabel om de berichtcategorieën en hun toewijzingen op te slaan. Hieronder vindt u de beschrijving van alle kolommen van de categorietabel.

Id Het unieke ID om de categorie te identificeren.
Ouder-ID Het bovenliggende ID om de bovenliggende categorie te identificeren.
Titel De categorietitel.
Metatitel De metatitel die moet worden gebruikt voor browsertitel en SEO.
Naaktslak De categorie-slug om de URL te vormen.
Inhoud De kolom die wordt gebruikt om de categoriegegevens op te slaan.

De categorietabel met de juiste beperkingen is zoals hieronder weergegeven.

CREATE TABLE `blog`.`category` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL DEFAULT NULL,
`slug` VARCHAR(100) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`));

ALTER TABLE `blog`.`category`
ADD INDEX `idx_category_parent` (`parentId` ASC);
ALTER TABLE `blog`.`category`
ADD CONSTRAINT `fk_category_parent`
FOREIGN KEY (`parentId`)
REFERENCES `blog`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Hieronder vindt u de beschrijving van alle kolommen van de tabel met berichtcategorieën.

Bericht-ID De post-ID om de post te identificeren.
Categorie-ID De categorie-ID om de categorie te identificeren.

De Post Categorie Tabel met de juiste beperkingen is zoals hieronder getoond.

 
CREATE TABLE `blog`.`post_category` (
`postId` BIGINT NOT NULL,
`categoryId` BIGINT NOT NULL,
PRIMARY KEY (`postId`, `categoryId`),
INDEX `idx_pc_category` (`categoryId` ASC),
INDEX `idx_pc_post` (`postId` ASC),
CONSTRAINT `fk_pc_post`
FOREIGN KEY (`postId`)
REFERENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_pc_category`
FOREIGN KEY (`categoryId`)
REFERENCES `blog`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Tag-tabel en post-tagtabel

Net als bij de categorie- en postcategorietabellen, kunnen we de Tagtabel . ontwerpen en Tabel plaatsen . De belangrijkste verschillen tussen de categorie en tag worden hieronder vermeld.

  • De parentId-kolom is niet vereist in de Tag-tabel.
  • Het aantal categorieën blijft laag omdat deze kunnen worden gebruikt om het hoofdmenu te vormen voor navigatiedoeleinden. De tags kunnen meer zijn in vergelijking met categorieën.
  • Zowel categorieën als tags kunnen worden gebruikt om de berichten te relateren.
  • Men zou slechts een paar categorieën aan een bericht moeten toewijzen, terwijl het aantal tags meer kan zijn.

Samenvatting

Dit is hoe we een blogdatabase kunnen ontwerpen die kan worden gebruikt als de vorming van op blogs gebaseerde websites en mobiele applicaties. Hetzelfde kan verder worden verbeterd om meer geavanceerde opties toe te voegen, waaronder video's, betalingen, abonnementen, enz.

U kunt uw opmerkingen indienen om deel te nemen aan de discussie. Mogelijk bent u ook geïnteresseerd in het ontwerpen van de database van Poll &Survey-applicaties. Het RBAC-ontwerp kan worden gebruikt voor implementatie van op rollen gebaseerde toegangscontrole.

Het volledige databaseschema is ook beschikbaar op GitHub.


  1. Inleiding tot MaxScale-beheer met maxctrl voor MariaDB Cluster

  2. Wat is de betekenis van het vraagteken in MySQL bij WHERE column =??

  3. Lokale en globale tijdelijke tabellen in SQL Server

  4. PostgreSQL-lef:wat is "resjunk"?