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

Guide pour concevoir une base de données pour le système de réseau social dans MySQL

Ce didacticiel fournit les étapes complètes pour concevoir un schéma de base de données du système de réseau social pour gérer les utilisateurs, les amis, les abonnés, les groupes et les messages.

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

Base de données du système de réseau social

Vous pouvez également consulter les didacticiels populaires, notamment Comment installer MySQL 8 sur Ubuntu 20.04 LTS, Comment installer MySQL 8 sur Windows, Comment installer MySQL Workbench sur Ubuntu, Comment installer MySQL 8 avec Workbench sur Windows 10, Base de données RBAC dans MySql, Base de données de blogs dans MySQL, base de données de quiz dans MySQL, base de données de sondages et d'enquêtes dans MySQL, base de données de paniers d'achat en ligne dans MySQL, base de données d'inventaire dans MySQL et apprentissage des requêtes SQL de base dans MySQL.

Base de données du système de réseau social

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

CREATE SCHEMA `sns` 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 de l'utilisateur. 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 ou cryptés.
Enregistré à Cette colonne peut être utilisée pour calculer la durée de vie de l'utilisateur avec l'application.
Dernière connexion Il peut être utilisé pour identifier la dernière connexion de l'utilisateur.
Introduction La brève présentation de l'utilisateur.
Profil Détails de l'utilisateur.

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

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

Tableau des amis utilisateurs

Dans cette section, nous allons concevoir le tableau des amis utilisateurs pour stocker les amis de l'utilisateur. Le statut d'ami peut être utilisé pour suivre le statut d'amitié et le type peut être utilisé pour spécifier le type d'amitié. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des amis utilisateurs.

Identifiant L'identifiant unique pour identifier l'amitié.
Identifiant source L'identifiant de l'utilisateur pour identifier l'utilisateur qui a initié l'amitié.
Identifiant cible L'identifiant de l'ami.
Type Le type pour classer les amis. Il peut s'agir d'une école, d'un collège ou d'une connaissance.
Statut Le statut peut être Nouveau, Rejeté ou Actif.
Créé à Il stocke la date et l'heure auxquelles la demande d'ami a été lancée.
Mis à jour à Il stocke la date et l'heure auxquelles la demande d'ami a été mise à jour.
Remarques Il stocke les notes spécifiques à l'amitié.

Le tableau des amis utilisateurs avec les contraintes appropriées est illustré ci-dessous.

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

Tableau des utilisateurs abonnés

Dans cette section, nous allons concevoir le tableau des abonnés utilisateurs pour stocker les abonnés de l'utilisateur. Le type de suiveur peut être utilisé pour spécifier le type de suiveur parmi J'aime, N'aime pas ou Suivre. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des utilisateurs suivis.

Identifiant L'identifiant unique pour identifier le suiveur.
Identifiant source L'identifiant de l'utilisateur pour identifier l'utilisateur suiveur.
Identifiant cible L'identifiant d'utilisateur pour identifier l'utilisateur suivant.
Type Le type pour classer les abonnés. Cela peut être J'aime, Je n'aime pas ou Suivre.
Créé à Il stocke la date et l'heure auxquelles le suiveur a été créé.
Mis à jour à Il stocke la date et l'heure auxquelles le suiveur a été mis à jour.

Le tableau des utilisateurs suivis avec les contraintes appropriées est illustré ci-dessous.

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

Tableau des messages utilisateur

Dans cette section, nous allons concevoir le tableau des messages utilisateur pour stocker les messages de chat de l'utilisateur. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des messages utilisateur.

Identifiant L'identifiant unique pour identifier le message.
Identifiant source L'identifiant de l'utilisateur pour identifier l'expéditeur.
Identifiant cible L'identifiant de l'utilisateur pour identifier le destinataire.
Message Le corps du message.
Créé à Il stocke la date et l'heure auxquelles le message a été créé.
Mis à jour à Il stocke la date et l'heure auxquelles le message a été mis à jour.

Le tableau des messages utilisateur avec les contraintes appropriées est illustré ci-dessous.

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;

Tableau des publications des utilisateurs

Dans cette section, nous allons concevoir le tableau des publications d'utilisateurs pour stocker les publications des utilisateurs. L'expéditeur peut être tenu d'autoriser les autres utilisateurs disposant des autorisations appropriées à publier sur le mur de l'utilisateur. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des publications d'utilisateurs.

Identifiant L'identifiant unique pour identifier la publication.
Identifiant utilisateur L'identifiant de l'utilisateur pour identifier l'utilisateur correspondant.
Identifiant de l'expéditeur L'identifiant de l'expéditeur pour identifier l'expéditeur correspondant.
Message Le corps du message.
Créé à Il stocke la date et l'heure auxquelles la publication a été créée.
Mis à jour à Il stocke la date et l'heure auxquelles la publication a été mise à jour.

Le tableau des publications d'utilisateurs avec les contraintes appropriées est illustré ci-dessous.

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;

Tableau de groupe

Dans cette section, nous allons concevoir la table de groupe pour stocker les données du groupe. Vous trouverez ci-dessous la description de toutes les colonnes du tableau de groupe.

Identifiant L'identifiant unique pour identifier le groupe.
Créé par L'identifiant d'utilisateur pour identifier l'utilisateur qui a enregistré le groupe.
Mise à jour par L'ID utilisateur pour identifier l'utilisateur qui a mis à jour le groupe.
Titre Le titre du groupe.
Méta-titre Le méta-titre à utiliser pour le titre du navigateur et à des fins de référencement.
limace Le slug pour former l'URL unique.
Résumé Le résumé pour mentionner les principaux faits saillants.
Statut Le statut du groupe peut être Nouveau, Approuvé, Actif ou Bloqué.
Créé à Il stocke la date et l'heure auxquelles le groupe est créé.
Mis à jour à Il stocke la date et l'heure auxquelles le groupe est mis à jour.
Profil La colonne utilisée pour stocker les détails du profil du groupe.
Contenu La colonne utilisée pour stocker les détails supplémentaires du groupe.

Il utilise l'état de la colonne pour suivre l'état du groupe. Le statut peut être Nouveau, Approuvé, Actif ou Bloqué. Le tableau de groupe avec les contraintes appropriées est illustré ci-dessous.

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;

Méta groupe

La méta-table de groupe peut être utilisée pour stocker des informations supplémentaires sur les groupes, y compris l'URL de la bannière de groupe, etc. Vous trouverez ci-dessous la description de toutes les colonnes de la méta-table de groupe.

Identifiant L'identifiant unique pour identifier la méta du groupe.
Identifiant de groupe L'identifiant du groupe pour identifier le groupe parent.
Clé La clé identifiant la méta.
Contenu La colonne utilisée pour stocker les métadonnées du groupe.

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

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;

Tableau des membres du groupe

Dans cette section, nous allons concevoir le tableau des membres du groupe pour stocker les membres du groupe. Le statut de membre peut être utilisé pour suivre le statut d'adhésion et le rôle de membre peut être utilisé pour identifier les privilèges de membre. Vous trouverez ci-dessous la description de toutes les colonnes de la table des membres du groupe.

Identifiant L'identifiant unique pour identifier l'adhésion.
Identifiant de groupe L'identifiant du groupe pour identifier le groupe correspondant.
Identifiant utilisateur L'identifiant de l'utilisateur pour identifier l'utilisateur correspondant.
Identifiant du rôle Le rôle pour vérifier les privilèges de l'utilisateur.
Statut Le statut peut être Nouveau, Rejeté, Actif ou Bloqué.
Créé à Il stocke la date et l'heure auxquelles la demande du membre a été initiée.
Mis à jour à Il stocke la date et l'heure auxquelles le membre a été mis à jour.
Remarques Il stocke les notes spécifiques à l'adhésion.

La table des membres du groupe avec les contraintes appropriées est illustrée ci-dessous.

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

Tableau des suiveurs de groupe

Dans cette section, nous allons concevoir le Tableau des suiveurs de groupe pour stocker les abonnés du groupe. Le type d'abonné peut être J'aime, Je n'aime pas ou Suivre. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des suiveurs de groupe.

Identifiant L'identifiant unique pour identifier le suiveur.
Identifiant de groupe L'identifiant du groupe pour identifier le groupe correspondant.
Identifiant utilisateur L'identifiant de l'utilisateur pour identifier l'utilisateur correspondant.
Type Le type d'abonné peut être J'aime, Je n'aime pas ou Suivre.
Créé à Il stocke la date et l'heure auxquelles le suiveur a été créé.
Mis à jour à Il stocke la date et l'heure auxquelles le suiveur a été mis à jour.

Le tableau des suiveurs de groupe avec les contraintes appropriées est illustré ci-dessous.

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

Tableau des messages de groupe

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

Identifiant L'identifiant unique pour identifier le message.
Identifiant de groupe L'identifiant du groupe pour identifier le groupe correspondant.
Identifiant utilisateur L'identifiant de l'utilisateur pour identifier l'utilisateur correspondant.
Message Le corps du message.
Créé à Il stocke la date et l'heure auxquelles le message a été créé.
Mis à jour à Il stocke la date et l'heure auxquelles le message a été mis à jour.

Le tableau des messages de groupe avec les contraintes appropriées est illustré ci-dessous.

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;

Tableau des publications de groupe

Dans cette section, nous allons concevoir le tableau de publication de groupe pour stocker les messages du groupe. Les membres ayant le rôle approprié peuvent publier dans le groupe. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des publications de groupe.

Identifiant L'identifiant unique pour identifier la publication.
Identifiant de groupe L'identifiant du groupe pour identifier le groupe correspondant.
Identifiant utilisateur L'identifiant de l'utilisateur pour identifier l'utilisateur correspondant.
Message Le corps du message.
Créé à Il stocke la date et l'heure auxquelles la publication a été créée.
Mis à jour à Il stocke la date et l'heure auxquelles la publication a été mise à jour.

Le tableau des publications de groupe avec les contraintes appropriées est illustré ci-dessous.

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;

Résumé

Dans ce didacticiel, nous avons discuté de la conception de la base de données d'un système de réseau social pour gérer les utilisateurs, les amis, les abonnés, les messages et les groupes.

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 Blog, Shopping Cart et Poll &Survey. Le schéma complet de la base de données est également disponible sur GitHub.