Mysql
 sql >> Base de données >  >> RDS >> Mysql

Guide pour concevoir une base de données pour la gestion de blogs dans MySQL

Ce didacticiel fournit des étapes complètes pour concevoir un schéma de base de données pour gérer les utilisateurs, les articles de blog, les métadonnées de publication, les commentaires de publication, les catégories de publication et les balises de publication. Il peut également être utilisé pour développer un site Web de blog ou une application mobile.

Le diagramme de relation d'entité ou la conception visuelle de la base de données est illustré ci-dessous.

Image 1

Remarques  :Pour garder le schéma de la base de données simple et développer un produit minimal viable, il ne couvre pas les options plus avancées telles que la gestion des versions et la révision des publications. Il fournit des options pour examiner les commentaires des auteurs de publication afin d'éviter le spam afin que seuls les commentaires légitimes soient publiés et affichés sur la page de publication.

Vous pouvez également consulter les didacticiels populaires, notamment Comment installer MySQL 8 sur Ubuntu, Comment installer MySQL 8 sur Windows, Base de données RBAC dans MySql, Base de données de sondage et d'enquête dans MySql, Apprendre les requêtes SQL de base dans MySQL.

Base de données de blogs

La toute première étape consiste à créer la base de données de blogs. Il peut être créé à l'aide de la requête comme indiqué ci-dessous.

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

J'ai utilisé le jeu de caractères utf8mb4 pour prendre en charge un large éventail de caractères.

Tableau des utilisateurs

Dans cette section, nous allons concevoir la table des utilisateurs pour stocker les informations utilisateur de tous les auteurs de messages. Le même tableau peut être utilisé pour relier les auteurs des articles afin que tous les auteurs puissent gérer leurs propres articles. Vous trouverez ci-dessous la description de toutes les colonnes de la table des utilisateurs.

Identifiant L'identifiant unique pour identifier l'utilisateur.
Prénom Le prénom de l'utilisateur.
Deuxième prénom Le deuxième prénom de l'utilisateur.
Nom de famille Le nom de famille de l'utilisateur.
Mobile Le numéro de portable de l'utilisateur. Il peut être utilisé à des fins de connexion et d'enregistrement.
E-mail L'adresse e-mail de l'utilisateur. Il peut être utilisé à des fins de connexion et d'enregistrement.
Hachage du mot de passe Le hachage du mot de passe généré par l'algorithme approprié. Nous devons éviter de stocker des mots de passe simples.
Enregistré à Cette colonne peut être utilisée pour calculer la durée de vie de l'utilisateur avec le blog.
Dernière connexion Il peut être utilisé pour identifier la dernière connexion de l'utilisateur.
Introduction La brève introduction de l'auteur doit être affichée sur chaque article.
Profil Les détails de l'auteur à afficher sur la page de l'auteur.

La table utilisateur avec les contraintes appropriées est illustrée ci-dessous.

CREATE TABLE `blog`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50 ) NULL PAR DÉFAUT NULL,
`lastName` VARCHAR(50) NULL PAR DÉFAUT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NON NULL,
`registeredAt` DATETIME NON NULL,
`lastLogin` DATETIME NULL PAR DÉFAUT NULL,
`intro` TINYTEXT NULL PAR DÉFAUT NULL,
` profile` TEXTE NULL PAR DÉFAUT NULL,
CLÉ PRIMAIRE (`id`),
INDEX UNIQUE `uq_mobile` (`mobile` ASC),
INDEX UNIQUE `uq_email` (`email` ASC) );

Publier le tableau

Dans cette section, nous allons concevoir le Post Table pour stocker les données de poste. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des messages.

Identifiant L'identifiant unique pour identifier la publication.
Identifiant de l'auteur L'identifiant de l'auteur pour identifier l'auteur du message.
Identifiant parent L'identifiant parent pour identifier la publication parent. Il peut être utilisé pour former la table des matières de l'article parent de la série.
Titre Le titre de la publication à afficher sur la page de publication et les listes.
Méta-titre Le méta-titre à utiliser pour le titre du navigateur et le référencement.
limace Le post slug pour former l'URL.
Résumé Le résumé du message pour mentionner les points saillants.
Publié Il peut être utilisé pour identifier si le message est accessible au public.
Créé à Il stocke la date et l'heure auxquelles la publication est créée.
Mis à jour à Il stocke la date et l'heure auxquelles la publication est mise à jour.
Publié à Il stocke la date et l'heure auxquelles le message est publié.
Contenu La colonne utilisée pour stocker les données de publication.

La table de publication avec les contraintes appropriées est illustrée ci-dessous.

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` TEXTE NULL PAR DÉFAUT NULL,
CLÉ PRIMAIRE (`id`),
INDEX UNIQUE `uq_slug` (`slug` ASC),
INDEX `idx_post_user` (` authorId` ASC),
CONTRAINTE `fk_post_user`
CLÉ ÉTRANGÈRE (`authorId`)
RÉFÉRENCES `blog`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `blog`.`post`
AJOUTER INDEX `idx_post_parent` (`parentId` ASC);
ALTER TABLE `blog `.`post`
AJOUTER UNE CONTRAINTE `fk_post_parent`
CLÉ ÉTRANGÈRE (`parentId` )
RÉFÉRENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Meta de publication

La Post Meta Table peut être utilisée pour stocker des informations supplémentaires sur une publication, y compris l'URL de la bannière de la publication, etc. Vous trouverez ci-dessous la description de toutes les colonnes de la Post Meta Table.

Identifiant L'identifiant unique pour identifier la méta de la publication.
Identifiant de publication L'identifiant de la publication pour identifier la publication parente.
Clé La clé identifiant la méta.
Contenu La colonne utilisée pour stocker les données de publication.

Le Post Meta Table avec les contraintes appropriées est comme indiqué ci-dessous.

CREATE TABLE `blog`.`post_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`postId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXTE NULL PAR DÉFAUT NULL,
CLÉ PRIMAIRE (`id`),
INDEX `idx_meta_post` (`postId` ASC),
INDEX UNIQUE `uq_post_meta` (` postId` ASC, `key` ASC),
CONTRAINTE `fk_meta_post`
CLÉ ÉTRANGÈRE (`postId`)
RÉFÉRENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE =InnoDB;

Tableau des publications de commentaires

Dans cette section, nous allons concevoir le tableau de publication de commentaires pour stocker les commentaires de publication. Vous trouverez ci-dessous la description de toutes les colonnes du tableau de publication de commentaires.

Identifiant L'identifiant unique pour identifier le commentaire de publication.
Identifiant de publication L'identifiant de la publication pour identifier la publication parente.
Identifiant parent L'identifiant parent pour identifier le commentaire parent.
Titre Le titre du commentaire.
Publié Il peut être utilisé pour identifier si le commentaire est accessible au public.
Créé à Il stocke la date et l'heure auxquelles le commentaire est soumis.
Publié à Il stocke la date et l'heure auxquelles le commentaire est publié.
Contenu La colonne utilisée pour stocker les données de commentaire.

Le tableau de publication de commentaires avec les contraintes appropriées est illustré ci-dessous.

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` TEXTE NULL PAR DÉFAUT NULL,
CLÉ PRIMAIRE (`id`),
INDEX `idx_comment_post` (`postId` ASC),
CONTRAINTE `fk_comment_post`
CLÉ ÉTRANGÈRE (`postId`)
RÉFÉRENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `blog`.`post_comment`
AJOUTER L'INDEX `idx_comment_parent` (`parentId` ASC);
ALTER TABLE `blog`.`post_comment`
AJOUTER LA CONTRAINTE `fk_comment_parent`
CLÉ ÉTRANGÈRE (`parentId`)
RÉFÉRENCES `blog`.`post_comment` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Tableau des catégories et tableau des catégories de publications

Dans cette section, nous allons concevoir le tableau des catégories et tableau des catégories de publications pour stocker les catégories de publication et leurs mappages. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des catégories.

Identifiant L'identifiant unique pour identifier la catégorie.
Identifiant parent L'identifiant parent pour identifier la catégorie parent.
Titre Le titre de la catégorie.
Méta-titre Le méta-titre à utiliser pour le titre du navigateur et le référencement.
limace Le slug de catégorie pour former l'URL.
Contenu La colonne utilisée pour stocker les données de catégorie.

Le tableau des catégories avec les contraintes appropriées est illustré ci-dessous.

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`
AJOUTER UN INDEX `idx_category_parent` (`parentId` ASC);
ALTER TABLE `blog`.`category `
AJOUTER UNE CONTRAINTE `fk_category_parent`
CLÉ ÉTRANGÈRE (`parentId`)
RÉFÉRENCES `blog`.`category` (`id`)
ON DELETE NO ACTION
SUR LA MISE À JOUR AUCUNE ACTION ;

Vous trouverez ci-dessous la description de toutes les colonnes du tableau des catégories de publication.

Identifiant de publication L'identifiant de la publication pour identifier la publication.
Identifiant de catégorie L'identifiant de catégorie pour identifier la catégorie.

Le tableau des catégories de publication avec les contraintes appropriées est illustré ci-dessous.

 
CREATE TABLE `blog`.`post_category` (
`postId` BIGINT NOT NULL,
`categoryId` BIGINT NOT NULL,
CLÉ PRIMAIRE (`postId`, `categoryId`) ,
INDEX `idx_pc_category` (`categoryId` ASC),
INDEX `idx_pc_post` (`postId` ASC),
CONTRAINTE `fk_pc_post`
CLÉ ÉTRANGÈRE (`postId`)
RÉFÉRENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONTRAINTE `fk_pc_category`
FOREIGN KEY (` categoryId`)
RÉFÉRENCES `blog`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Tableau des balises et tableau des balises de publication

Semblable aux tableaux de catégories et de catégories de publications, nous pouvons concevoir le tableau de balises et Tableau des balises de publication . Les principales différences entre la catégorie et le tag sont répertoriées ci-dessous.

  • La colonne parentId n'est pas obligatoire dans le tableau des balises.
  • Le nombre de catégories reste faible car celles-ci peuvent être utilisées pour former le menu principal à des fins de navigation. Les tags peuvent être plus nombreux que les catégories.
  • Les catégories et les balises peuvent être utilisées pour relier les messages.
  • Il ne faut attribuer que quelques catégories à une publication alors que le nombre de balises peut être supérieur.

Résumé

C'est ainsi que nous pouvons concevoir une base de données de blogs à utiliser pour la formation de sites Web et d'applications mobiles basés sur des blogs. La même chose peut être encore améliorée pour ajouter des options plus avancées, y compris des vidéos, des paiements, des abonnements, etc.

Vous pouvez soumettre vos commentaires pour participer à la discussion. Vous pouvez également être intéressé par la conception de la base de données des applications Poll &Survey. La conception RBAC peut être utilisée pour la mise en œuvre du contrôle d'accès basé sur les rôles.

Le schéma complet de la base de données est également disponible sur GitHub.