Questo tutorial fornisce i passaggi completi per progettare uno schema di database del sistema di social network per gestire utenti, amici, follower, gruppi e messaggi.
Il diagramma della relazione tra entità o il design del database visivo è mostrato di seguito.
Database del sistema di social network
Puoi anche visitare i tutorial popolari tra cui Come installare MySQL 8 su Ubuntu 20.04 LTS, Come installare MySQL 8 su Windows, Come installare MySQL Workbench su Ubuntu, Come installare MySQL 8 con Workbench su Windows 10, Database RBAC in MySql, Database del blog in MySql, database dei quiz in MySQL, database di sondaggi e sondaggi in MySQL, database del carrello degli acquisti online in MySQL, database di inventario in MySQL e informazioni sulle query SQL di base in MySQL.
Database del sistema di social network
Il primo passo è creare il database del sistema di social network. Può essere creato utilizzando la query come mostrato di seguito.
CREATE SCHEMA `sns` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ho usato il set di caratteri utf8mb4 per supportare un'ampia gamma di caratteri.
Tabella utenti
In questa sezione, progetteremo la Tabella utente per memorizzare le informazioni sull'utente. Di seguito è riportata la descrizione di tutte le colonne della Tabella Utente.
ID | L'ID univoco per identificare l'utente. |
Nome | Il nome dell'utente. |
Secondo nome | Il secondo nome dell'utente. |
Cognome | Il cognome dell'utente. |
Cellulare | Il numero di cellulare dell'utente. Può essere utilizzato per scopi di accesso e registrazione. |
L'e-mail dell'utente. Può essere utilizzato per scopi di accesso e registrazione. | |
Hash password | L'hash della password generato dall'algoritmo appropriato. Dobbiamo evitare di memorizzare password semplici o crittografate. |
Registrato presso | Questa colonna può essere utilizzata per calcolare la vita dell'utente con l'applicazione. |
Ultimo accesso | Può essere utilizzato per identificare l'ultimo accesso dell'utente. |
Introduzione | La breve introduzione dell'Utente. |
Profilo | Dettagli utente. |
Di seguito è mostrata la tabella utente con i vincoli appropriati.
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) );
Tabella amici utenti
In questa sezione, progetteremo la Tabella degli amici degli utenti per memorizzare gli amici dell'utente. Lo stato amico può essere utilizzato per tenere traccia dello stato dell'amicizia e il tipo può essere utilizzato per specificare il tipo di amicizia. Di seguito è riportata la descrizione di tutte le colonne della User Friend Table.
ID | L'ID univoco per identificare l'amicizia. |
ID sorgente | L'ID utente per identificare l'utente che ha avviato l'amicizia. |
ID destinazione | L'ID utente dell'amico. |
Tipo | Il tipo per classificare gli amici. Può essere Scuola, Università o Conoscenza. |
Stato | Lo stato può essere Nuovo, Rifiutato o Attivo. |
Creato a | Memorizza la data e l'ora in cui è stata avviata la richiesta di amicizia. |
Aggiornato a | Memorizza la data e l'ora in cui è stata aggiornata la richiesta di amicizia. |
Note | Memorizza le note specifiche dell'amicizia. |
Di seguito è mostrata la User Friend Table con i vincoli appropriati.
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`);
Tabella dei follower degli utenti
In questa sezione, progetteremo la Tabella dei follower degli utenti per memorizzare i follower degli utenti. Il tipo di follower può essere utilizzato per specificare il tipo di follower tra Mi piace, Non mi piace o Segui. Di seguito è riportata la descrizione di tutte le colonne della User Follower Table.
ID | L'ID univoco per identificare il follower. |
ID sorgente | L'ID utente per identificare l'utente follower. |
ID destinazione | L'ID utente per identificare il seguente utente. |
Tipo | Il tipo per classificare i follower. Può essere Mi piace, Non mi piace o Segui. |
Creato a | Memorizza la data e l'ora in cui è stato creato il follower. |
Aggiornato a | Memorizza la data e l'ora in cui il follower è stato aggiornato. |
Di seguito è mostrata la tabella User Follower con i vincoli appropriati.
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`);
Tabella messaggi utente
In questa sezione, progetteremo la Tabella dei messaggi utente per memorizzare i messaggi di chat dell'utente. Di seguito è riportata la descrizione di tutte le colonne della User Message Table.
ID | L'ID univoco per identificare il messaggio. |
ID sorgente | L'ID utente per identificare il mittente. |
ID destinazione | L'ID utente per identificare il destinatario. |
Messaggio | Il corpo del messaggio. |
Creato a | Memorizza la data e l'ora in cui è stato creato il messaggio. |
Aggiornato a | Memorizza la data e l'ora in cui il messaggio è stato aggiornato. |
La tabella dei messaggi utente con i vincoli appropriati è mostrata di seguito.
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;
Tabella dei post degli utenti
In questa sezione, progetteremo la Tabella dei post degli utenti per memorizzare i post degli utenti. Al mittente potrebbe essere richiesto di consentire agli altri utenti con autorizzazioni appropriate di inviare messaggi sulla bacheca degli utenti. Di seguito è riportata la descrizione di tutte le colonne della User Post Table.
ID | L'ID univoco per identificare il post. |
ID utente | L'ID utente per identificare l'utente corrispondente. |
ID mittente | L'ID mittente per identificare il mittente corrispondente. |
Messaggio | Il corpo del messaggio. |
Creato a | Memorizza la data e l'ora in cui è stato creato il post. |
Aggiornato a | Memorizza la data e l'ora in cui il post è stato aggiornato. |
La tabella dei post utente con i vincoli appropriati è mostrata di seguito.
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;
Tabella di gruppo
In questa sezione, progetteremo la Tabella di gruppo per memorizzare i dati del gruppo. Di seguito è riportata la descrizione di tutte le colonne della Group Table.
ID | L'ID univoco per identificare il gruppo. |
Creato da | L'ID utente per identificare l'utente che ha registrato il gruppo. |
Aggiornato da | L'ID utente per identificare l'utente che ha aggiornato il gruppo. |
Titolo | Il titolo del gruppo. |
Metatitolo | Il meta titolo da utilizzare per il titolo del browser e per scopi SEO. |
Slug | Lo slug per formare l'URL univoco. |
Riepilogo | Il riepilogo per citare i punti salienti. |
Stato | Lo stato del gruppo può essere Nuovo, Approvato, Attivo o Bloccato. |
Creato a | Memorizza la data e l'ora di creazione del gruppo. |
Aggiornato a | Memorizza la data e l'ora in cui il gruppo viene aggiornato. |
Profilo | La colonna utilizzata per memorizzare i dettagli del profilo del gruppo. |
Contenuto | La colonna utilizzata per memorizzare i dettagli aggiuntivi del gruppo. |
Utilizza lo stato della colonna per tenere traccia dello stato del gruppo. Lo stato può essere Nuovo, Approvato, Attivo o Bloccato. La tabella di gruppo con i vincoli appropriati è quella mostrata di seguito.
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 gruppo
La Group Meta Table può essere utilizzata per memorizzare informazioni aggiuntive sui gruppi, incluso l'URL del banner del gruppo, ecc. Di seguito è menzionata la descrizione di tutte le colonne della Group Meta Table.
ID | L'ID univoco per identificare il meta del gruppo. |
ID gruppo | L'ID del gruppo per identificare il gruppo principale. |
Chiave | La chiave che identifica il meta. |
Contenuto | La colonna utilizzata per memorizzare i metadati del gruppo. |
La Meta Table di gruppo con i vincoli appropriati è quella mostrata di seguito.
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;
Tabella dei membri del gruppo
In questa sezione, progetteremo la Tabella dei membri del gruppo per memorizzare i membri del gruppo. Lo stato di membro può essere utilizzato per tenere traccia dello stato di appartenenza e il ruolo di membro può essere utilizzato per identificare i privilegi di membro. Di seguito è riportata la descrizione di tutte le colonne della tabella dei membri del gruppo.
ID | L'ID univoco per identificare l'appartenenza. |
ID gruppo | L'ID del gruppo per identificare il gruppo corrispondente. |
ID utente | L'ID utente per identificare l'utente corrispondente. |
ID ruolo | Il ruolo per controllare i privilegi dell'utente. |
Stato | Lo stato può essere Nuovo, Rifiutato, Attivo o Bloccato. |
Creato a | Memorizza la data e l'ora in cui è stata avviata la richiesta del membro. |
Aggiornato a | Memorizza la data e l'ora in cui il membro è stato aggiornato. |
Note | Memorizza le note specifiche dell'abbonamento. |
La tabella dei membri del gruppo con i vincoli appropriati è mostrata di seguito.
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`);
Tabella dei follower del gruppo
In questa sezione, progetteremo la Tabella dei follower del gruppo per memorizzare i follower del gruppo. Il tipo di follower può essere Mi piace, Non mi piace o Segui. Di seguito è riportata la descrizione di tutte le colonne della Group Follower Table.
ID | L'ID univoco per identificare il follower. |
ID gruppo | L'ID del gruppo per identificare il gruppo corrispondente. |
ID utente | L'ID utente per identificare l'utente corrispondente. |
Tipo | Il tipo di follower può essere Mi piace, Non mi piace o Segui. |
Creato a | Memorizza la data e l'ora in cui è stato creato il follower. |
Aggiornato a | Memorizza la data e l'ora in cui il follower è stato aggiornato. |
Di seguito è mostrata la tabella Group Follower con i vincoli appropriati.
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`);
Tabella dei messaggi di gruppo
In questa sezione, progetteremo la Tabella dei messaggi di gruppo per memorizzare i messaggi della chat di gruppo. Di seguito è riportata la descrizione di tutte le colonne della tabella dei messaggi di gruppo.
ID | L'ID univoco per identificare il messaggio. |
ID gruppo | L'ID del gruppo per identificare il gruppo corrispondente. |
ID utente | L'ID utente per identificare l'utente corrispondente. |
Messaggio | Il corpo del messaggio. |
Creato a | Memorizza la data e l'ora in cui è stato creato il messaggio. |
Aggiornato a | Memorizza la data e l'ora in cui il messaggio è stato aggiornato. |
Di seguito è mostrata la tabella dei messaggi di gruppo con i vincoli appropriati.
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;
Tabella dei post di gruppo
In questa sezione, progetteremo la Tabella dei post di gruppo per memorizzare i post del gruppo. I membri con il ruolo appropriato possono pubblicare post nel gruppo. Di seguito è riportata la descrizione di tutte le colonne della Tabella Post Gruppo.
ID | L'ID univoco per identificare il post. |
ID gruppo | L'ID del gruppo per identificare il gruppo corrispondente. |
ID utente | L'ID utente per identificare l'utente corrispondente. |
Messaggio | Il corpo del messaggio. |
Creato a | Memorizza la data e l'ora in cui è stato creato il post. |
Aggiornato a | Memorizza la data e l'ora in cui il post è stato aggiornato. |
Di seguito è mostrata la tabella dei messaggi di gruppo con i vincoli appropriati.
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;
Riepilogo
In questo tutorial, abbiamo discusso la progettazione del database di un sistema di social network per gestire utenti, amici, follower, messaggi e gruppi.
Puoi inviare i tuoi commenti per partecipare alla discussione. Potresti anche essere interessato a progettare il database delle applicazioni Blog, Carrello della spesa e Sondaggi e sondaggi. Lo schema completo del database è disponibile anche su GitHub.