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

Guida alla progettazione di database per la gestione dei blog in MySQL

Questo tutorial fornisce i passaggi completi per progettare uno schema di database per gestire utenti, post di blog, metadati di post, commenti di post, categorie di post e tag di post. Può essere ulteriormente utilizzato per sviluppare un sito Web di blog o un'applicazione mobile.

Il diagramma della relazione tra entità o il design del database visivo è mostrato di seguito.

Fig 1

Note :per mantenere lo schema del database semplice e per sviluppare un prodotto minimo praticabile, non copre le opzioni più avanzate come il controllo delle versioni e la revisione dei post. Fornisce opzioni per rivedere i commenti degli autori dei post per evitare lo spamming in modo che solo i commenti legittimi vengano pubblicati e visualizzati nella Pagina del post.

Puoi anche visitare i tutorial popolari tra cui Come installare MySQL 8 su Ubuntu, Come installare MySQL 8 su Windows, Database RBAC in MySql, Database di sondaggi e sondaggi in MySql, Scopri le query SQL di base in MySQL.

Banca dati blog

Il primo passo è creare il database del blog. Può essere creato utilizzando la query come mostrato di seguito.

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

Ho usato il set di caratteri utf8mb4 per supportare un'ampia gamma di caratteri.

Tabella utenti

In questa sezione, progetteremo la Tabella utente per memorizzare le informazioni sull'utente di tutti gli autori dei post. La stessa tabella può essere utilizzata per mettere in relazione gli autori dei post in modo che tutti gli autori possano gestire i propri post. Di seguito è riportata la descrizione di tutte le colonne della Tabella Utente.

ID L'ID univoco per identificare l'utente.
Nome Il nome dell'utente.
Secondo nome Il secondo nome dell'utente.
Cognome Il cognome dell'utente.
Cellulare Il numero di cellulare dell'utente. Può essere utilizzato per scopi di accesso e registrazione.
E-mail L'e-mail dell'utente. Può essere utilizzato per scopi di accesso e registrazione.
Hash password L'hash della password generato dall'algoritmo appropriato. Dobbiamo evitare di memorizzare password semplici.
Registrato presso Questa colonna può essere utilizzata per calcolare la vita dell'utente con il blog.
Ultimo accesso Può essere utilizzato per identificare l'ultimo accesso dell'utente.
Introduzione La breve introduzione dell'Autore da visualizzare in ogni post.
Profilo I dettagli dell'autore da visualizzare nella pagina dell'autore.

La tabella utente con i vincoli appropriati è quella mostrata di seguito.

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

Tabella dei post

In questa sezione, progetteremo la Tabella dei post per memorizzare i dati del post. Di seguito è riportata la descrizione di tutte le colonne della Post Table.

ID L'ID univoco per identificare il post.
ID autore L'ID autore per identificare l'autore del post.
ID genitore L'ID genitore per identificare il post principale. Può essere utilizzato per formare il sommario del post principale della serie.
Titolo Il titolo del post da visualizzare nella Pagina del post e negli elenchi.
Metatitolo Il meta titolo da utilizzare per il titolo del browser e SEO.
Slug Il post slug per formare l'URL.
Riepilogo Il riepilogo del post per citare i punti salienti.
Pubblicato Può essere utilizzato per identificare se il post è disponibile pubblicamente.
Creato a Memorizza la data e l'ora in cui viene creato il post.
Aggiornato a Memorizza la data e l'ora in cui il post viene aggiornato.
Pubblicato su Memorizza la data e l'ora di pubblicazione del post.
Contenuto La colonna utilizzata per memorizzare i dati del post.

La tabella dei post con i vincoli appropriati è quella mostrata di seguito.

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;

Post Meta

La Post Meta Table può essere utilizzata per memorizzare informazioni aggiuntive di un post, incluso l'URL del banner del post, ecc. Di seguito è menzionata la descrizione di tutte le colonne della Post Meta Table.

ID L'ID univoco per identificare il meta del post.
ID post L'ID del post per identificare il post principale.
Chiave La chiave che identifica il meta.
Contenuto La colonna utilizzata per memorizzare i dati del post.

La Post Meta Table con i vincoli appropriati è quella mostrata di seguito.

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;

Pubblica la tabella dei commenti

In questa sezione, progetteremo la Tabella Post Commento per memorizzare i commenti del post. Di seguito è indicata la descrizione di tutte le colonne della Tabella dei commenti ai post.

ID L'ID univoco per identificare il commento del post.
ID post L'ID del post per identificare il post principale.
ID genitore L'ID genitore per identificare il commento genitore.
Titolo Il titolo del commento.
Pubblicato Può essere utilizzato per identificare se il commento è disponibile pubblicamente.
Creato a Memorizza la data e l'ora in cui viene inviato il commento.
Pubblicato su Memorizza la data e l'ora in cui viene pubblicato il commento.
Contenuto La colonna utilizzata per memorizzare i dati del commento.

La tabella post commento con i vincoli appropriati è quella mostrata di seguito.

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;

Tabella delle categorie e Tabella delle categorie dei post

In questa sezione, progetteremo la Tabella delle categorie e Tabella delle categorie dei post per memorizzare le categorie di post e le relative mappature. Di seguito è riportata la descrizione di tutte le colonne della Tabella delle Categorie.

ID L'ID univoco per identificare la categoria.
ID genitore L'ID genitore per identificare la categoria genitore.
Titolo Il titolo della categoria.
Metatitolo Il meta titolo da utilizzare per il titolo del browser e SEO.
Slug La categoria slug per formare l'URL.
Contenuto La colonna utilizzata per memorizzare i dati della categoria.

La tabella delle categorie con i vincoli appropriati è quella mostrata di seguito.

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;

Di seguito è indicata la descrizione di tutte le colonne della tabella delle categorie di post.

ID post L'ID del post per identificare il post.
ID categoria L'ID categoria per identificare la categoria.

La tabella delle categorie di post con i vincoli appropriati è quella mostrata di seguito.

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

Tabella tag e tabella post tag

In modo simile alle tabelle delle categorie e dei post, possiamo progettare la Tabella dei tag e Tabella Post Tag . Le principali differenze tra Categoria e Tag sono elencate di seguito.

  • La colonna parentId non è richiesta nella tabella dei tag.
  • Il conteggio delle categorie rimane basso poiché queste possono essere utilizzate per formare il menu principale per scopi di navigazione. I tag possono essere di più rispetto alle categorie.
  • Sia le categorie che i tag possono essere utilizzati per mettere in relazione i post.
  • Si dovrebbero assegnare solo poche categorie a un post, mentre il conteggio dei tag può essere maggiore.

Riepilogo

È così che possiamo progettare un database di blog da utilizzare come formazione di siti Web basati su blog e applicazioni mobili. Lo stesso può essere ulteriormente migliorato per aggiungere opzioni più avanzate tra cui video, pagamenti, abbonamenti, ecc.

Puoi inviare i tuoi commenti per partecipare alla discussione. Potresti anche essere interessato a progettare il database delle applicazioni Sondaggio e Sondaggio. Il design RBAC può essere utilizzato per l'implementazione del controllo degli accessi in base al ruolo.

Lo schema completo del database è disponibile anche su GitHub.