Mysql
 sql >> Database >  >> RDS >> Mysql

Guida alla progettazione di database per il sistema di social network in MySQL

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