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.