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

Guide til designdatabase til blogstyring i MySQL

Denne vejledning indeholder komplette trin til at designe et databaseskema til at administrere brugerne, blogindlæg, post-metadata, postkommentarer, postkategorier og post-tags. Det kan yderligere bruges til at udvikle en blogging-hjemmeside eller mobilapplikation.

Entity Relationship Diagram eller visuelle databasedesign er vist nedenfor.

Fig. 1

Noter :For at holde databaseskemaet simpelt og for at udvikle et minimalt levedygtigt produkt, dækker det ikke de mere avancerede muligheder som versionering og gennemgang af indlæggene. Det giver muligheder for at gennemgå indlægsforfatternes kommentarer for at undgå spamming, så kun legitime kommentarer vil blive offentliggjort og vist på indlægssiden.

Du kan også besøge de populære tutorials, herunder hvordan man installerer MySQL 8 på Ubuntu, hvordan man installerer MySQL 8 på Windows, RBAC-database i MySql, meningsmåling og undersøgelsesdatabase i MySql, lær grundlæggende SQL-forespørgsler i MySQL.

Blogdatabase

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

CREATE SCHEMA `blog` 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 om alle indlægsforfatterne. Den samme tabel kan bruges til at relatere indlægsforfatterne, så alle forfatterne kan administrere deres egne indlæg. 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 adgangskoder.
Registreret på Denne kolonne kan bruges til at beregne levetiden for brugeren med bloggen.
Sidste login Det kan bruges til at identificere brugerens sidste login.
Introduktion Den korte introduktion af forfatteren, der skal vises på hvert indlæg.
Profil Forfatterdetaljerne skal vises på forfattersiden.

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

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

Indlægstabel

I dette afsnit vil vi designe Posttabellen at gemme postdataene. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i posttabellen.

Id Det unikke id til at identificere indlægget.
Forfatter-id Forfatter-id'et til at identificere indlægsforfatteren.
Forældre-id Forælder-id'et til at identificere det overordnede indlæg. Det kan bruges til at danne indholdsfortegnelsen for det overordnede indlæg i serien.
Titel Opslagets titel, der skal vises på indlægssiden og listerne.
Metatitel Metatitlen, der skal bruges til browsertitel og SEO.
Snegl Indlægssneglen til at danne URL'en.
Oversigt Opsummeringen af ​​indlægget for at nævne de vigtigste højdepunkter.
Udgivet Det kan bruges til at identificere, om indlægget er offentligt tilgængeligt.
Oprettet på Den gemmer datoen og klokkeslættet, hvor indlægget er oprettet.
Opdateret kl. Det gemmer datoen og klokkeslættet, hvor indlægget er opdateret.
Udgivet på Den gemmer datoen og tidspunktet, hvor indlægget er offentliggjort.
Indhold Kolonnen, der bruges til at gemme postdataene.

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

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;

Send Meta

Post-meta-tabellen kan bruges til at gemme yderligere information om et indlæg, inklusive post-banner-URL osv. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i post-meta-tabellen.

Id Det unikke id til at identificere postmetaen.
Indlægs-id Indlægs-id'et til at identificere det overordnede indlæg.
Nøgle Nøglen, der identificerer metaen.
Indhold Kolonnen, der bruges til at gemme postdataene.

Post-metatabellen med de relevante begrænsninger er som vist nedenfor.

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;

Send kommentartabel

I dette afsnit vil vi designe Send kommentartabellen for at gemme indlæggets kommentarer. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i postkommentartabellen.

Id Det unikke id til at identificere indlægskommentaren.
Indlægs-id Indlægs-id'et til at identificere det overordnede indlæg.
Forældre-id Forælder-id'et til at identificere forældrekommentaren.
Titel Kommentarens titel.
Udgivet Den kan bruges til at identificere, om kommentaren er offentligt tilgængelig.
Oprettet på Den gemmer datoen og klokkeslættet, hvor kommentaren sendes.
Udgivet på Den gemmer datoen og klokkeslættet, hvor kommentaren er offentliggjort.
Indhold Kolonnen, der bruges til at gemme kommentardataene.

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

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;

Kategori-tabel og post-kategoritabel

I dette afsnit vil vi designe Kategoritabellen og Tabel med postkategori at gemme postkategorierne og deres tilknytninger. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i kategoritabellen.

Id Det unikke id til at identificere kategorien.
Forældre-id Det overordnede id til at identificere den overordnede kategori.
Titel Kategorititlen.
Metatitel Metatitlen, der skal bruges til browsertitel og SEO.
Snegl Kategoriesneglen til at danne URL'en.
Indhold Kolonnen, der bruges til at gemme kategoridataene.

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

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;

Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i postkategoritabellen.

Indlægs-id Indlægs-id'et til at identificere indlægget.
Kategori-id Kategori-id'et til at identificere kategorien.

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

 
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 og Post-tag-tabel

I lighed med kategori- og postkategoritabellerne kan vi designe Tag-tabellen og Tabel over post tag . De største forskelle mellem kategorien og tagget er angivet nedenfor.

  • Forældre-id-kolonnen er ikke påkrævet i tagtabellen.
  • Antallet af kategorier forbliver lavt, da disse kan bruges til at danne hovedmenuen til navigationsformål. Mærkerne kan være flere sammenlignet med kategorier.
  • Både kategorier og tags kan bruges til at relatere indlæggene.
  • Man bør kun tildele nogle få kategorier til et opslag, hvorimod tags kan være flere.

Oversigt

Sådan kan vi designe en blogdatabase, der skal bruges som dannelse af blogbaserede websteder og mobilapplikationer. Det samme kan forbedres yderligere for at tilføje mere avancerede muligheder, herunder videoer, betalinger, abonnementer osv.

Du kan indsende dine kommentarer for at deltage i diskussionen. Du kan også være interesseret i at designe databasen med Poll &Survey-applikationer. RBAC-designet kan bruges til rollebaseret adgangskontrolimplementering.

Det komplette databaseskema er også tilgængeligt på GitHub.


  1. En databasemodel til en onlineundersøgelse. Del 2

  2. Pivottabel og sammenkædning af kolonner

  3. Er der en måde at tvinge OracleCommand.BindByName til at være sand som standard for ODP.NET?

  4. cx_Oracle forbinder ikke, når du bruger SID i stedet for tjenestenavn på forbindelsesstrengen