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. |
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.