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. |
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.