sql >> Base de Datos >  >> RDS >> Mysql

Guía para diseñar una base de datos para la gestión de blogs en MySQL

Este tutorial proporciona pasos completos para diseñar un esquema de base de datos para administrar usuarios, publicaciones de blog, metadatos de publicaciones, comentarios de publicaciones, categorías de publicaciones y etiquetas de publicaciones. Se puede usar más para desarrollar un sitio web de blogs o una aplicación móvil.

El Diagrama de Relación de Entidades o el diseño de la base de datos visual se muestra a continuación.

higo 1

Notas :Para mantener el esquema de la base de datos simple y desarrollar un producto viable mínimo, no cubre las opciones más avanzadas como el control de versiones y la revisión de las publicaciones. Brinda opciones para revisar los comentarios de los autores de las publicaciones para evitar el spam, de modo que solo los comentarios legítimos se publiquen y muestren en la página de la publicación.

También puede visitar los populares tutoriales que incluyen Cómo instalar MySQL 8 en Ubuntu, Cómo instalar MySQL 8 en Windows, Base de datos RBAC en MySql, Base de datos de sondeos y encuestas en MySql, Aprenda consultas SQL básicas en MySQL.

Base de datos de blogs

El primer paso es crear la base de datos del blog. Se puede crear usando la consulta como se muestra a continuación.

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

He usado el conjunto de caracteres utf8mb4 para admitir una amplia gama de caracteres.

Tabla de usuarios

En esta sección, diseñaremos la Tabla de usuarios para almacenar información de usuario de todos los autores de publicaciones. La misma tabla se puede utilizar para relacionar los autores de las publicaciones para que todos los autores puedan administrar sus propias publicaciones. A continuación se menciona la descripción de todas las columnas de la tabla de usuarios.

Id La identificación única para identificar al usuario.
Nombre El nombre del usuario.
Segundo Nombre El segundo nombre del usuario.
Apellido El apellido del usuario.
Móvil El número de móvil del usuario. Se puede utilizar con fines de inicio de sesión y registro.
Correo electrónico El correo electrónico del usuario. Se puede utilizar con fines de inicio de sesión y registro.
Hash de contraseña El hash de contraseña generado por el algoritmo apropiado. Debemos evitar almacenar contraseñas sin formato.
Registrado en Esta columna se puede utilizar para calcular la vida del usuario con el blog.
Último inicio de sesión Se puede utilizar para identificar el último inicio de sesión del usuario.
Introducción La breve introducción del autor que se mostrará en cada publicación.
Perfil Los detalles del autor que se mostrarán en la página del autor.

La tabla de usuarios con las restricciones adecuadas se muestra a continuación.

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

Publicar mesa

En esta sección, diseñaremos la tabla de publicaciones para almacenar los datos de la publicación. A continuación se menciona la descripción de todas las columnas de la tabla de publicaciones.

Id La identificación única para identificar la publicación.
Id del autor La identificación del autor para identificar al autor de la publicación.
Id principal La identificación principal para identificar la publicación principal. Se puede usar para formar la tabla de contenido de la publicación principal de la serie.
Título El título de la publicación que se mostrará en la página de publicación y las listas.
Metatítulo El metatítulo que se usará para el título del navegador y SEO.
Babosa El slug de publicación para formar la URL.
Resumen El resumen de la publicación para mencionar los aspectos más destacados.
Publicado Se puede usar para identificar si la publicación está disponible públicamente.
Creado en Almacena la fecha y hora en que se crea la publicación.
Actualizado en Almacena la fecha y hora en que se actualiza la publicación.
Publicado en Almacena la fecha y hora en que se publica el post.
Contenido La columna utilizada para almacenar los datos de la publicación.

La tabla de publicación con las restricciones apropiadas se muestra a continuación.

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;

Publicar meta

La metatabla de publicaciones se puede utilizar para almacenar información adicional de una publicación, incluida la URL del banner de la publicación, etc. A continuación se menciona la descripción de todas las columnas de la metatabla de publicaciones.

Id La identificación única para identificar la publicación meta.
Identificación de publicación La identificación de la publicación para identificar la publicación principal.
Clave La clave que identifica el meta.
Contenido La columna utilizada para almacenar los datos de la publicación.

La metatabla de publicación con las restricciones apropiadas se muestra a continuación.

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;

Tabla de comentarios publicados

En esta sección, diseñaremos la Tabla de comentarios de publicación para almacenar los comentarios de la publicación. A continuación se menciona la descripción de todas las columnas de la tabla de comentarios de publicaciones.

Id La identificación única para identificar el comentario de la publicación.
Identificación de publicación La identificación de la publicación para identificar la publicación principal.
Id principal La identificación principal para identificar el comentario principal.
Título El título del comentario.
Publicado Se puede utilizar para identificar si el comentario está disponible públicamente.
Creado en Almacena la fecha y hora en que se envía el comentario.
Publicado en Almacena la fecha y hora en que se publica el comentario.
Contenido La columna utilizada para almacenar los datos del comentario.

La tabla de comentarios de publicación con las restricciones adecuadas se muestra a continuación.

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;

Tabla de categorías y tabla de categorías de publicaciones

En esta sección, diseñaremos la Tabla de categorías y Tabla de categorías de publicaciones para almacenar las categorías de publicaciones y sus asignaciones. A continuación se menciona la descripción de todas las columnas de la tabla de categorías.

Id La identificación única para identificar la categoría.
Id principal La identificación principal para identificar la categoría principal.
Título El título de la categoría.
Metatítulo El metatítulo que se usará para el título del navegador y SEO.
Babosa El slug de categoría para formar la URL.
Contenido La columna utilizada para almacenar los datos de la categoría.

La tabla de categorías con las restricciones apropiadas se muestra a continuación.

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;

A continuación se menciona la descripción de todas las columnas de la tabla de categorías de publicaciones.

Id. de publicación La identificación de la publicación para identificar la publicación.
ID de categoría El ID de categoría para identificar la categoría.

La tabla de categorías de publicaciones con las restricciones apropiadas se muestra a continuación.

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

Tabla de etiquetas y tabla de etiquetas de publicación

Similar a las tablas de categorías y categorías de publicaciones, podemos diseñar la Tabla de etiquetas y Tabla de etiquetas de publicación . Las principales diferencias entre la categoría y la etiqueta se enumeran a continuación.

  • La columna parentId no es obligatoria en la tabla de etiquetas.
  • El recuento de categorías sigue siendo bajo, ya que se pueden usar para formar el menú principal con fines de navegación. Las etiquetas pueden ser más en comparación con las categorías.
  • Se pueden usar categorías y etiquetas para relacionar las publicaciones.
  • Uno debe asignar solo unas pocas categorías a una publicación, mientras que el número de etiquetas puede ser mayor.

Resumen

Así es como podemos diseñar una base de datos de blogs para ser utilizada como la formación de sitios web basados ​​en blogs y aplicaciones móviles. Lo mismo se puede mejorar aún más para agregar opciones más avanzadas, incluidos videos, pagos, suscripciones, etc.

Puede enviar sus comentarios para unirse a la discusión. También te puede interesar diseñar la base de datos de las aplicaciones Poll &Survey. El diseño RBAC se puede utilizar para la implementación del control de acceso basado en roles.

El esquema completo de la base de datos también está disponible en GitHub.