Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Guia para projetar banco de dados para sistema de rede social no MySQL


Este tutorial fornece as etapas completas para projetar um esquema de banco de dados do Social Network System para gerenciar os usuários, amigos, seguidores, grupos e mensagens.



O diagrama de relacionamento de entidade ou design de banco de dados visual é mostrado abaixo.



Banco de dados do sistema de rede social



Você também pode visitar os tutoriais populares, incluindo como instalar o MySQL 8 no Ubuntu 20.04 LTS, como instalar o MySQL 8 no Windows, como instalar o MySQL Workbench no Ubuntu, como instalar o MySQL 8 com o Workbench no Windows 10, banco de dados RBAC no MySql, Banco de dados de blog em MySQL, banco de dados de questionário em MySQL, banco de dados de pesquisa e pesquisa em MySQL, banco de dados de carrinho de compras on-line em MySQL, banco de dados de inventário em MySQL e aprender consultas básicas de SQL em MySQL.


Banco de dados do sistema de rede social




O primeiro passo é criar o Banco de Dados do Sistema de Rede Social. Ele pode ser criado usando a consulta conforme mostrado abaixo.


CREATE SCHEMA `sns` 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. 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.
E-mail 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 ou criptografadas.
Registrado em Esta coluna pode ser usada para calcular a vida útil do usuário com o aplicativo.
Último login Pode ser usado para identificar o último login do usuário.
Introdução A breve introdução do usuário.
Perfil Detalhes do usuário.



A Tabela de Usuários com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `sns`.`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,
`username` 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_username` (`username` ASC),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );


Tabela de amigos do usuário




Nesta seção, projetaremos a Tabela de amigos do usuário para armazenar os amigos do usuário. O status de amigo pode ser usado para rastrear o status de amizade e o tipo pode ser usado para especificar o tipo de amizade. Abaixo está a descrição de todas as colunas da Tabela de Amigos do Usuário.


ID O ID exclusivo para identificar a amizade.
ID de origem O ID do usuário para identificar o usuário que iniciou a amizade.
ID de destino O ID de usuário do amigo.
Tipo O tipo para classificar amigos. Pode ser Escola, Faculdade ou Conhecido.
Estado O status pode ser Novo, Rejeitado ou Ativo.
Criado em Ele armazena a data e hora em que a solicitação de amizade foi iniciada.
Atualizado em Ele armazena a data e hora em que a solicitação de amizade foi atualizada.
Observações Armazena as notas específicas da amizade.



A tabela de amigos do usuário com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `sns`.`user_friend` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`sourceId` BIGINT NOT NULL,
`targetId` BIGINT NOT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`notes` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_friend_source` (`sourceId` ASC),
CONSTRAINT `fk_friend_source`
FOREIGN KEY (`sourceId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`user_friend`
ADD INDEX `idx_friend_target` (`targetId` ASC);
ALTER TABLE `sns`.`user_friend`
ADD CONSTRAINT `fk_friend_target`
FOREIGN KEY (`targetId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `sns`.`user_friend` ADD UNIQUE `uq_friend`(`sourceId`, `targetId`);


Tabela de seguidores do usuário




Nesta seção, projetaremos a Tabela de seguidores do usuário para armazenar os seguidores do usuário. O tipo de seguidor pode ser usado para especificar o tipo de seguidor entre Curtir, Não gostar ou Seguir. Abaixo está a descrição de todas as colunas da Tabela de Seguidores de Usuários.


ID O ID exclusivo para identificar o seguidor.
ID de origem O ID do usuário para identificar o usuário seguidor.
ID de destino O ID do usuário para identificar o usuário a seguir.
Tipo O tipo para classificar seguidores. Pode ser Curtir, Não Curtir ou Seguir.
Criado em Ele armazena a data e hora em que o seguidor foi criado.
Atualizado em Ele armazena a data e hora em que o seguidor foi atualizado.



A Tabela User Follower com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `sns`.`user_follower` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`sourceId` BIGINT NOT NULL,
`targetId` BIGINT NOT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_ufollower_source` (`sourceId` ASC),
CONSTRAINT `fk_ufollower_source`
FOREIGN KEY (`sourceId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`user_follower`
ADD INDEX `idx_ufollower_target` (`targetId` ASC);
ALTER TABLE `sns`.`user_follower`
ADD CONSTRAINT `fk_ufollower_target`
FOREIGN KEY (`targetId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;


ALTER TABLE `sns`.`user_follower` ADD UNIQUE `uq_ufollower`(`sourceId`, `targetId`, `type`);


Tabela de mensagens do usuário




Nesta seção, projetaremos a Tabela de mensagens do usuário para armazenar as mensagens de bate-papo do usuário. Abaixo está a descrição de todas as colunas da Tabela de Mensagens do Usuário.


ID O ID exclusivo para identificar a mensagem.
ID de origem O ID do usuário para identificar o remetente.
ID de destino O ID do usuário para identificar o destinatário.
Mensagem O corpo da mensagem.
Criado em Ele armazena a data e hora em que a mensagem foi criada.
Atualizado em Ele armazena a data e hora em que a mensagem foi atualizada.



A tabela de mensagens do usuário com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `sns`.`user_message` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`sourceId` BIGINT NOT NULL,
`targetId` BIGINT NOT NULL,
`message` TINYTEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_umessage_source` (`sourceId` ASC),
CONSTRAINT `fk_umessage_source`
FOREIGN KEY (`sourceId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`user_message`
ADD INDEX `idx_umessage_target` (`targetId` ASC);
ALTER TABLE `sns`.`user_message`
ADD CONSTRAINT `fk_umessage_target`
FOREIGN KEY (`targetId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;


Tabela de postagem do usuário




Nesta seção, projetaremos a Tabela de postagem do usuário para armazenar as postagens do usuário. O remetente pode ser solicitado a permitir que outros usuários com permissões apropriadas postem no mural do usuário. Abaixo está a descrição de todas as colunas da Tabela de Postagens do Usuário.


ID O ID exclusivo para identificar a postagem.
ID de usuário O ID do usuário para identificar o usuário correspondente.
ID do remetente O ID do remetente para identificar o remetente correspondente.
Mensagem O corpo da mensagem.
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 foi atualizada.



A tabela de postagem do usuário com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `sns`.`user_post` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`senderId` BIGINT NOT NULL,
`message` TINYTEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_upost_user` (`userId` ASC),
CONSTRAINT `fk_upost_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`user_post`
ADD INDEX `idx_upost_sender` (`senderId` ASC);
ALTER TABLE `sns`.`user_post`
ADD CONSTRAINT `fk_upost_sender`
FOREIGN KEY (`senderId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;


Tabela de Grupo




Nesta seção, projetaremos a Tabela de Grupo para armazenar os dados do grupo. Abaixo está a descrição de todas as colunas da Tabela de Grupos.


ID O ID exclusivo para identificar o grupo.
Criado por O ID do usuário para identificar o usuário que registrou o grupo.
Atualizado por O ID do usuário para identificar o usuário que atualizou o grupo.
Título O título do grupo.
Metatítulo O meta-título a ser usado para o título do navegador e propósitos de SEO.
Slug O slug para formar o URL exclusivo.
Resumo O resumo para mencionar os principais destaques.
Estado O status do grupo pode ser Novo, Aprovado, Ativo ou Bloqueado.
Criado em Ele armazena a data e hora em que o grupo foi criado.
Atualizado em Ele armazena a data e hora em que o grupo é atualizado.
Perfil A coluna usada para armazenar os detalhes do perfil do grupo.
Conteúdo A coluna usada para armazenar os detalhes adicionais do grupo.



Ele usa o status da coluna para rastrear o status do grupo. O status pode ser Novo, Aprovado, Ativo ou Bloqueado. A Tabela de Grupos com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `sns`.`group` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_group_creator` (`createdBy` ASC),
CONSTRAINT `fk_group_creator`
FOREIGN KEY (`createdBy`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`group`
ADD INDEX `idx_group_modifier` (`updatedBy` ASC);
ALTER TABLE `sns`.`group`
ADD CONSTRAINT `fk_group_modifier`
FOREIGN KEY (`updatedBy`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;


Meta do Grupo




A Meta Tabela do Grupo pode ser usada para armazenar informações adicionais sobre os grupos, incluindo a URL do banner do grupo, etc. Abaixo está a descrição de todas as colunas da Meta Tabela do Grupo.


ID O ID exclusivo para identificar a meta do grupo.
ID do grupo O ID do grupo para identificar o grupo pai.
Chave A chave que identifica o meta.
Conteúdo A coluna usada para armazenar os metadados do grupo.



A Tabela Meta do Grupo com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `sns`.`group_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_group` (`groupId` ASC),
UNIQUE INDEX `uq_meta_group` (`groupId` ASC, `key` ASC),
CONSTRAINT `fk_meta_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;


Tabela de Membros do Grupo




Nesta seção, projetaremos a Tabela de membros do grupo para armazenar os membros do grupo. O status do membro pode ser usado para rastrear o status da associação e a função do membro pode ser usada para identificar os privilégios do membro. Abaixo está a descrição de todas as colunas da Tabela de Membros do Grupo.


ID O ID exclusivo para identificar a associação.
ID do grupo O ID do grupo para identificar o grupo correspondente.
ID de usuário O ID do usuário para identificar o usuário correspondente.
ID da função A função para verificar os privilégios do usuário.
Estado O status pode ser Novo, Rejeitado, Ativo ou Bloqueado.
Criado em Ele armazena a data e hora em que a solicitação do membro foi iniciada.
Atualizado em Ele armazena a data e hora em que o membro foi atualizado.
Observações Ele armazena as notas específicas da associação.



A Tabela de Membros do Grupo com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `sns`.`group_member` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`notes` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_member_group` (`groupId` ASC),
CONSTRAINT `fk_member_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`group_member`
ADD INDEX `idx_member_user` (`userId` ASC);
ALTER TABLE `sns`.`group_member`
ADD CONSTRAINT `fk_member_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `sns`.`group_member` ADD UNIQUE `uq_friend`(`groupId`, `userId`);


Tabela de Seguidores do Grupo




Nesta seção, projetaremos a Tabela de seguidores do grupo para armazenar os seguidores do grupo. O tipo de seguidor pode ser Curtir, Não gostar ou Seguir. Abaixo está a descrição de todas as colunas da Tabela de Seguidores do Grupo.


ID O ID exclusivo para identificar o seguidor.
ID do grupo O ID do grupo para identificar o grupo correspondente.
ID de usuário O ID do usuário para identificar o usuário correspondente.
Tipo O tipo de seguidor pode ser Curtir, Não gostar ou Seguir.
Criado em Ele armazena a data e hora em que o seguidor foi criado.
Atualizado em Ele armazena a data e hora em que o seguidor foi atualizado.



A Tabela de Seguidores de Grupo com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `sns`.`group_follower` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_gfollower_group` (`groupId` ASC),
CONSTRAINT `fk_gfollower_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`group_follower`
ADD INDEX `idx_gfollower_user` (`userId` ASC);
ALTER TABLE `sns`.`group_follower`
ADD CONSTRAINT `fk_gfollower_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `sns`.`group_follower` ADD UNIQUE `uq_friend`(`groupId`, `userId`, `type`);


Tabela de mensagens de grupo




Nesta seção, projetaremos a Tabela de mensagens de grupo para armazenar as mensagens de bate-papo em grupo. Abaixo está a descrição de todas as colunas da Tabela de Mensagens do Grupo.


ID O ID exclusivo para identificar a mensagem.
ID do grupo O ID do grupo para identificar o grupo correspondente.
ID de usuário O ID do usuário para identificar o usuário correspondente.
Mensagem O corpo da mensagem.
Criado em Ele armazena a data e hora em que a mensagem foi criada.
Atualizado em Ele armazena a data e hora em que a mensagem foi atualizada.



A Tabela de Mensagens do Grupo com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `sns`.`group_message` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`message` TINYTEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_gmessage_group` (`groupId` ASC),
CONSTRAINT `fk_gmessage_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`group_message`
ADD INDEX `idx_gmessage_user` (`userId` ASC);
ALTER TABLE `sns`.`group_message`
ADD CONSTRAINT `fk_gmessage_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;


Tabela de postagens do grupo




Nesta seção, projetaremos a Tabela de postagens do grupo para armazenar as postagens do grupo. Os membros com a função apropriada podem postar no grupo. Abaixo está a descrição de todas as colunas da Tabela Post do Grupo.


ID O ID exclusivo para identificar a postagem.
ID do grupo O ID do grupo para identificar o grupo correspondente.
ID de usuário O ID do usuário para identificar o usuário correspondente.
Mensagem O corpo da mensagem.
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 foi atualizada.



A Tabela de Posts do Grupo com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `sns`.`group_post` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`message` TINYTEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_gpost_group` (`groupId` ASC),
CONSTRAINT `fk_gpost_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`group_post`
ADD INDEX `idx_gpost_user` (`userId` ASC);
ALTER TABLE `sns`.`group_post`
ADD CONSTRAINT `fk_gpost_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;


Resumo




Neste tutorial, discutimos o projeto de banco de dados de um Sistema de Rede Social para gerenciar os usuários, amigos, seguidores, mensagens e grupos.



Você pode enviar seus comentários para participar da discussão. Você também pode estar interessado em projetar o banco de dados dos aplicativos Blog, Carrinho de compras e Pesquisa e pesquisa. O esquema completo do banco de dados também está disponível no GitHub.