sql >> Databasteknik >  >> RDS >> Mysql

Guide till designdatabas för blogghantering i MySQL

Denna handledning innehåller fullständiga steg för att utforma ett databasschema för att hantera användare, blogginlägg, inläggsmetadata, inläggskommentarer, inläggskategorier och inläggstaggar. Den kan användas vidare för att utveckla en bloggwebbplats eller mobilapplikation.

Entity Relationship Diagram eller visuell databasdesign visas nedan.

Fig 1

Anteckningar :För att hålla databasschemat enkelt och för att utveckla en minimal livskraftig produkt täcker det inte de mer avancerade alternativen som versionshantering och granskning av inläggen. Det ger alternativ för att granska kommentarerna från inläggsförfattarna för att undvika spam så att endast legitima kommentarer kommer att publiceras och visas på inläggssidan.

Du kan också besöka de populära handledningarna, inklusive hur man installerar MySQL 8 på Ubuntu, hur man installerar MySQL 8 på Windows, RBAC Database i MySql, Poll och Survey Database i MySql, Lär dig grundläggande SQL-frågor i MySQL.

Bloggdatabas

Det allra första steget är att skapa bloggdatabasen. Den kan skapas med hjälp av frågan som visas nedan.

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

Jag har använt teckenuppsättningen utf8mb4 för att stödja ett stort antal tecken.

Användartabell

I det här avsnittet kommer vi att utforma användartabellen för att lagra användarinformation för alla inläggsförfattare. Samma tabell kan användas för att relatera inläggsförfattarna så att alla författare kan hantera sina egna inlägg. Nedan nämns beskrivningen av alla kolumner i användartabellen.

Id Det unika ID:t för att identifiera användaren.
Förnamn Användarens förnamn.
Mellannamn Användarens mellannamn.
Efternamn Användarens efternamn.
Mobil Användarens mobilnummer. Den kan användas för inloggning och registreringsändamål.
E-post Användarens e-postadress. Den kan användas för inloggning och registreringsändamål.
Lösenordshash Lösenords-hash som genereras av lämplig algoritm. Vi måste undvika att lagra vanliga lösenord.
Registrerad på Denna kolumn kan användas för att beräkna livslängden för användaren med bloggen.
Senaste inloggning Den kan användas för att identifiera användarens senaste inloggning.
Intro Den korta introduktionen av författaren som ska visas på varje inlägg.
Profil Författarinformationen som ska visas på författarsidan.

Användartabellen med lämpliga begränsningar är som visas nedan.

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

Inläggstabell

I det här avsnittet kommer vi att utforma Inläggstabellen för att lagra inläggsdata. Nedan nämns beskrivningen av alla kolumner i posttabellen.

Id Det unika ID:t för att identifiera inlägget.
Författar-ID Författar-id för att identifiera inläggets författare.
Förälder-ID Det överordnade ID:t för att identifiera det överordnade inlägget. Den kan användas för att bilda innehållsförteckningen för det överordnade inlägget i serien.
Titel Inläggets titel som ska visas på inläggssidan och listorna.
Metatitel Metatiteln som ska användas för webbläsartitel och SEO.
Snigel Inläggssnäckan för att bilda URL:en.
Sammanfattning Sammanfattningen av inlägget för att nämna de viktigaste höjdpunkterna.
Publicerad Den kan användas för att identifiera om inlägget är allmänt tillgängligt.
Skapat vid Den lagrar datum och tid då inlägget skapades.
Uppdaterad kl. Den lagrar datum och tid då inlägget uppdateras.
Publicerad på Den lagrar datum och tid då inlägget publiceras.
Innehåll Kolumnen som används för att lagra inläggsdata.

Posttabellen med lämpliga begränsningar är som visas nedan.

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;

Inläggsmeta

Post-metatabellen kan användas för att lagra ytterligare information om ett inlägg, inklusive inläggsbannerns URL etc. Nedan nämns en beskrivning av alla kolumner i postmetatabellen.

Id Det unika ID:t för att identifiera inläggets meta.
Inläggs-ID Inläggs-id för att identifiera det överordnade inlägget.
Nyckel Nyckeln som identifierar meta.
Innehåll Kolumnen som används för att lagra inläggsdata.

Post-metatabellen med lämpliga begränsningar är som visas nedan.

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;

Tabell för inläggskommentarer

I det här avsnittet kommer vi att utforma tabellen för inlägg av kommentarer för att lagra inläggets kommentarer. Nedan nämns beskrivningen av alla kolumner i postkommentartabellen.

Id Det unika ID:t för att identifiera inläggskommentaren.
Inläggs-ID Inläggs-id för att identifiera det överordnade inlägget.
Förälder-ID Förälder-id för att identifiera föräldrakommentaren.
Titel Kommentartiteln.
Publicerad Den kan användas för att identifiera om kommentaren är allmänt tillgänglig.
Skapat vid Den lagrar datum och tid då kommentaren skickas.
Publicerad på Den lagrar datum och tid då kommentaren publiceras.
Innehåll Kolumnen som används för att lagra kommentarsdata.

Postkommentartabellen med lämpliga begränsningar är som visas nedan.

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;

Kategoritabell och Postkategoritabell

I det här avsnittet kommer vi att utforma Kategoritabellen och Inläggskategoritabell för att lagra inläggskategorierna och deras mappningar. Nedan nämns beskrivningen av alla kolumner i kategoritabellen.

Id Det unika ID:t för att identifiera kategorin.
Förälder-ID Det överordnade id för att identifiera den överordnade kategorin.
Titel Kategorititeln.
Metatitel Metatiteln som ska användas för webbläsartitel och SEO.
Snigel Kategorin som bildar URL:en.
Innehåll Kolumnen som används för att lagra kategoridata.

Kategoritabellen med lämpliga begränsningar är som visas nedan.

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;

Nedan nämns beskrivningen av alla kolumner i postkategoritabellen.

Inläggs-ID Inläggs-id för att identifiera inlägget.
Kategori-ID Kategori-id för att identifiera kategorin.

Postkategoritabellen med lämpliga begränsningar är som visas nedan.

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

Taggtabell och Post-taggtabell

I likhet med kategori- och postkategoritabellerna kan vi designa Taggtabellen och Tabell för posttagg . De största skillnaderna mellan kategorin och taggen listas nedan.

  • Kolumnen parentId krävs inte i taggtabellen.
  • Antalet kategorier är fortfarande lågt eftersom dessa kan användas för att bilda huvudmenyn för navigeringsändamål. Taggarna kan vara fler jämfört med kategorier.
  • Både kategorier och taggar kan användas för att relatera inläggen.
  • Man bör bara tilldela ett fåtal kategorier till ett inlägg medan taggantalet kan vara fler.

Sammanfattning

Så här kan vi designa en bloggdatabas som ska användas för att skapa bloggbaserade webbplatser och mobilapplikationer. Detsamma kan förbättras ytterligare för att lägga till mer avancerade alternativ inklusive videor, betalningar, prenumerationer, etc.

Du kan skicka in dina kommentarer för att delta i diskussionen. Du kanske också är intresserad av att designa databasen med Poll &Survey-applikationer. RBAC-designen kan användas för rollbaserad åtkomstkontrollimplementering.

Det fullständiga databasschemat finns också tillgängligt på GitHub.


  1. Långa strängar i N-Hibernate med Oracle orsakar fel

  2. SQL Server Databas Snapshots -1

  3. ett bättre tillvägagångssätt än att lagra mysql-lösenord i vanlig text i konfigurationsfil?

  4. PostgreSQL:Ändra OWNER på alla tabeller samtidigt i PostgreSQL