Este tutorial fornece etapas completas para projetar um esquema de banco de dados para gerenciar os usuários, postagens de blog, metadados de postagem, comentários de postagem, categorias de postagem e tags de postagem. Ele pode ser usado para desenvolver um site de blog ou aplicativo móvel.
O diagrama de relacionamento de entidade ou design de banco de dados visual é mostrado abaixo.
Figura 1
Observações :Para manter o esquema do banco de dados simples e desenvolver um produto mínimo viável, ele não cobre as opções mais avançadas como versionamento e revisão das postagens. Ele fornece opções para revisar os comentários dos autores da postagem para evitar spam, de modo que apenas comentários legítimos sejam publicados e exibidos na Página de postagem.
Você também pode visitar os tutoriais populares, incluindo Como instalar o MySQL 8 no Ubuntu, Como instalar o MySQL 8 no Windows, Banco de dados RBAC no MySql, Banco de dados de pesquisa e pesquisa no MySql, Aprenda consultas básicas de SQL no MySQL.
Banco de dados de blogs
O primeiro passo é criar o Banco de Dados do Blog. Ele pode ser criado usando a consulta conforme mostrado abaixo.
CREATE SCHEMA `blog` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Eu usei o conjunto de caracteres utf8mb4 para suportar uma ampla gama de caracteres.
Tabela de usuário
Nesta seção, projetaremos a Tabela do usuário para armazenar informações do usuário de todos os autores de postagem. A mesma tabela pode ser usada para relacionar os autores das postagens para que todos os autores possam gerenciar suas próprias postagens. Abaixo está a descrição de todas as colunas da Tabela de Usuários.
ID | O ID exclusivo para identificar o usuário. |
Nome | O primeiro nome do usuário. |
Nome do meio | O nome do meio do usuário. |
Sobrenome | O sobrenome do usuário. |
Celular | O número de celular do usuário. Ele pode ser usado para fins de login e registro. |
O e-mail do usuário. Ele pode ser usado para fins de login e registro. | |
Hash de senha | O hash de senha gerado pelo algoritmo apropriado. Devemos evitar armazenar senhas simples. |
Registrado em | Esta coluna pode ser usada para calcular a vida útil do usuário com o blog. |
Último login | Pode ser usado para identificar o último login do usuário. |
Introdução | A breve introdução do autor a ser exibida em cada postagem. |
Perfil | Os detalhes do autor a serem exibidos na página do autor. |
A Tabela de Usuários com as restrições apropriadas é mostrada abaixo.
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) );
Tabela de postagens
Nesta seção, projetaremos a Tabela de postagens para armazenar os dados de postagem. Abaixo mencionada é a descrição de todas as colunas da Tabela Post.
ID | O ID exclusivo para identificar a postagem. |
ID do autor | O ID do autor para identificar o autor da postagem. |
ID pai | O ID pai para identificar a postagem pai. Ele pode ser usado para formar a tabela de conteúdo da postagem pai da série. |
Título | O título da postagem a ser exibido na página de postagem e nas listas. |
Metatítulo | O meta-título a ser usado para o título do navegador e SEO. |
Slug | O slug de postagem para formar o URL. |
Resumo | O resumo da postagem para mencionar os principais destaques. |
Publicado | Pode ser usado para identificar se a postagem está disponível publicamente. |
Criado em | Ele armazena a data e hora em que a postagem foi criada. |
Atualizado em | Ele armazena a data e hora em que a postagem é atualizada. |
Publicado em | Ele armazena a data e hora em que a postagem foi publicada. |
Conteúdo | A coluna usada para armazenar os dados da postagem. |
A Tabela Post com as restrições apropriadas é mostrada abaixo.
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;
Meta de postagem
A Post Meta Table pode ser usada para armazenar informações adicionais de uma postagem, incluindo o URL do banner da postagem, etc. Abaixo mencionada é a descrição de todas as colunas da Post Meta Table.
ID | O ID exclusivo para identificar a meta da postagem. |
ID da postagem | O ID da postagem para identificar a postagem principal. |
Chave | A chave que identifica o meta. |
Conteúdo | A coluna usada para armazenar os dados da postagem. |
A Post Meta Table com as restrições apropriadas é mostrada abaixo.
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;
Tabela de comentários de postagem
Nesta seção, projetaremos a Tabela de postagem de comentários para armazenar os comentários da postagem. Abaixo mencionada é a descrição de todas as colunas da Tabela de comentários de postagem.
ID | O ID exclusivo para identificar o comentário da postagem. |
ID da postagem | O ID da postagem para identificar a postagem principal. |
ID pai | O ID pai para identificar o comentário pai. |
Título | O título do comentário. |
Publicado | Pode ser usado para identificar se o comentário está disponível publicamente. |
Criado em | Ele armazena a data e hora em que o comentário é enviado. |
Publicado em | Ele armazena a data e hora em que o comentário é publicado. |
Conteúdo | A coluna usada para armazenar os dados do comentário. |
A Tabela de comentários de postagem com as restrições apropriadas é mostrada abaixo.
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;
Tabela de categoria e Tabela de categoria de postagem
Nesta seção, projetaremos a Tabela de categorias e Tabela de categoria de postagem para armazenar as categorias de postagem e seus mapeamentos. Abaixo está a descrição de todas as colunas da Tabela de Categorias.
ID | O ID exclusivo para identificar a categoria. |
ID pai | O ID pai para identificar a categoria pai. |
Título | O título da categoria. |
Metatítulo | O meta-título a ser usado para o título do navegador e SEO. |
Slug | O slug de categoria para formar o URL. |
Conteúdo | A coluna usada para armazenar os dados da categoria. |
A Tabela de Categorias com as restrições apropriadas é mostrada abaixo.
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;
Abaixo está a descrição de todas as colunas da Tabela de Categoria de Post.
ID da postagem | O ID da postagem para identificar a postagem. |
ID da categoria | O ID da categoria para identificar a categoria. |
A Tabela de categoria de postagem com as restrições apropriadas é mostrada abaixo.
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);
Tabela de tags e tabela de tags de postagem
Semelhante às tabelas de categoria e categoria de postagem, podemos criar a Tabela de tags e Tabela de tags de postagem . As principais diferenças entre a Categoria e a Tag estão listadas abaixo.
- A coluna parentId não é obrigatória na Tabela de tags.
- A contagem de categorias permanece baixa, pois elas podem ser usadas para formar o menu principal para fins de navegação. As tags podem ser mais do que categorias.
- Tanto as categorias quanto as tags podem ser usadas para relacionar as postagens.
- Deve-se atribuir apenas algumas categorias a uma postagem, enquanto a contagem de tags pode ser maior.
Resumo
É assim que podemos projetar um Banco de Dados de Blogs para ser usado na formação de sites e aplicativos móveis baseados em Blogs. O mesmo pode ser aprimorado ainda mais para adicionar opções mais avançadas, incluindo vídeos, pagamentos, assinaturas, etc.
Você pode enviar seus comentários para participar da discussão. Você também pode estar interessado em projetar o banco de dados de aplicativos Poll &Survey. O design RBAC pode ser usado para implementação de controle de acesso baseado em função.
O esquema completo do banco de dados também está disponível no GitHub.