sql >> Databáze >  >> RDS >> Mysql

Průvodce návrhem databáze pro systém sociálních sítí v MySQL

Tento tutoriál poskytuje úplné kroky k návrhu schématu databáze systému sociálních sítí pro správu uživatelů, přátel, sledujících, skupin a zpráv.

Diagram vztahů entit nebo návrh vizuální databáze je uveden níže.

Databáze systému sociálních sítí

Můžete také navštívit oblíbené výukové programy včetně Jak nainstalovat MySQL 8 na Ubuntu 20.04 LTS, Jak nainstalovat MySQL 8 na Windows, Jak nainstalovat MySQL Workbench na Ubuntu, Jak nainstalovat MySQL 8 s Workbenchem na Windows 10, Databáze RBAC v MySql, Databáze blogů v MySql, kvízová databáze v MySQL, databáze anket a průzkumů v MySQL, databáze nákupních košíků online v MySQL, databáze zásob v MySQL a Naučte se základní SQL dotazy v MySQL.

Databáze systému sociální sítě

Úplně prvním krokem je vytvoření databáze systému sociálních sítí. Lze jej vytvořit pomocí dotazu, jak je uvedeno níže.

CREATE SCHEMA `sns` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Použil jsem znakovou sadu utf8mb4 pro podporu široké škály znaků.

Tabulka uživatelů

V této části navrhneme Tabulku uživatelů k ukládání uživatelských informací. Níže je uveden popis všech sloupců tabulky uživatelů.

ID Jedinečné ID k identifikaci uživatele.
Křestní jméno Křestní jméno uživatele.
Prostřední jméno Prostřední jméno uživatele.
Příjmení Příjmení uživatele.
Mobil Číslo mobilního telefonu uživatele. Lze jej použít pro účely přihlášení a registrace.
E-mail E-mailová adresa uživatele. Lze jej použít pro účely přihlášení a registrace.
Hašování hesla Hash hash hesla vygenerovaný příslušným algoritmem. Musíme se vyhnout ukládání jednoduchých nebo šifrovaných hesel.
Registrováno na Tento sloupec lze použít k výpočtu životnosti uživatele s aplikací.
Poslední přihlášení Lze jej použít k identifikaci posledního přihlášení uživatele.
Úvod Krátké představení uživatele.
Profil Podrobnosti uživatele.

Tabulka uživatelů s příslušnými omezeními je uvedena níže.

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

Tabulka uživatelských přátel

V této části navrhneme Tabulku uživatelských přátel k uložení přátel uživatele. Stav přítele lze použít ke sledování stavu přátelství a typ lze použít k určení typu přátelství. Níže je uveden popis všech sloupců tabulky uživatelských přátel.

ID Jedinečné ID k identifikaci přátelství.
ID zdroje ID uživatele k identifikaci uživatele, který inicioval přátelství.
Cílové ID ID uživatele přítele.
Typ Typ pro klasifikaci přátel. Může to být škola, vysoká škola nebo známost.
Stav Stav může být Nový, Odmítnutý nebo Aktivní.
Vytvořeno v Ukládá datum a čas, kdy byla žádost o přátelství zahájena.
Aktualizováno dne Ukládá datum a čas, kdy byla žádost o přátelství aktualizována.
Poznámky Ukládá poznámky specifické pro přátelství.

Tabulka uživatelských přátel s příslušnými omezeními je uvedena níže.

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

Tabulka sledujících uživatelů

V této části navrhneme Tabulku sledujících uživatelů pro uložení sledujících uživatelů. Typ sledujícího lze použít k určení typu sledujícího mezi možnostmi Líbí se mi, Nelíbí se mi nebo Sledovat. Níže je uveden popis všech sloupců tabulky sledujících uživatele.

ID Jedinečné ID k identifikaci sledujícího.
ID zdroje ID uživatele k identifikaci sledujícího uživatele.
Cílové ID ID uživatele k identifikaci následujícího uživatele.
Typ Typ pro klasifikaci sledujících. Může to být Líbí se mi, Nelíbí se mi nebo Sledovat.
Vytvořeno v Ukládá datum a čas, kdy byl sledující vytvořen.
Aktualizováno dne Ukládá datum a čas, kdy byl sledující aktualizován.

Tabulka sledování uživatelů s příslušnými omezeními je uvedena níže.

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

Tabulka uživatelských zpráv

V této části navrhneme Tabulku uživatelských zpráv pro ukládání uživatelských chatových zpráv. Níže je uveden popis všech sloupců tabulky uživatelských zpráv.

ID Jedinečné ID k identifikaci zprávy.
ID zdroje ID uživatele k identifikaci odesílatele.
Cílové ID ID uživatele k identifikaci příjemce.
Zpráva Tělo zprávy.
Vytvořeno v Ukládá datum a čas, kdy byla zpráva vytvořena.
Aktualizováno dne Ukládá datum a čas, kdy byla zpráva aktualizována.

Tabulka uživatelských zpráv s příslušnými omezeními je uvedena níže.

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;

Tabulka uživatelských příspěvků

V této sekci navrhneme Tabulku uživatelských příspěvků k ukládání uživatelských příspěvků. Odesílatel může být požádán, aby umožnil ostatním uživatelům s příslušnými oprávněními přispívat na uživatelskou zeď. Níže je uveden popis všech sloupců tabulky uživatelských příspěvků.

ID Jedinečné ID k identifikaci příspěvku.
ID uživatele ID uživatele k identifikaci odpovídajícího uživatele.
ID odesílatele ID odesílatele k identifikaci odpovídajícího odesílatele.
Zpráva Tělo zprávy.
Vytvořeno v Ukládá datum a čas, kdy byl příspěvek vytvořen.
Aktualizováno dne Ukládá datum a čas, kdy byl příspěvek aktualizován.

Tabulka uživatelských příspěvků s příslušnými omezeními je uvedena níže.

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;

Tabulka skupin

V této části navrhneme Tabulku skupin pro uložení skupinových dat. Níže je uveden popis všech sloupců tabulky skupin.

ID Jedinečné ID k identifikaci skupiny.
Vytvořil ID uživatele k identifikaci uživatele, který zaregistroval skupinu.
Aktualizováno ID uživatele k identifikaci uživatele, který aktualizoval skupinu.
Název Název skupiny.
Název metadat Název metadat, který se má použít pro název prohlížeče a účely SEO.
Slimák Slim tvořící jedinečnou adresu URL.
Shrnutí Souhrn, ve kterém jsou zmíněny hlavní body.
Stav Stav skupiny může být Nová, Schválená, Aktivní nebo Blokovaná.
Vytvořeno v Ukládá datum a čas, kdy je skupina vytvořena.
Aktualizováno dne Ukládá datum a čas, kdy je skupina aktualizována.
Profil Sloupec používaný k uložení podrobností profilu skupiny.
Obsah Sloupec používaný k uložení dalších podrobností o skupině.

Ke sledování stavu skupiny používá stav sloupce. Stav může být buď Nový, Schváleno, Aktivní nebo Blokováno. Tabulka skupin s příslušnými omezeními je uvedena níže.

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;

Skupinové meta

Tabulku skupin metadat lze použít k uložení dalších informací o skupinách včetně adresy URL banneru skupiny atd. Níže je uveden popis všech sloupců tabulky meta tabulek skupin.

ID Jedinečné ID k identifikaci meta skupiny.
ID skupiny ID skupiny k identifikaci nadřazené skupiny.
Klíč Klíč identifikující meta.
Obsah Sloupec používaný k uložení metadat skupiny.

Tabulka skupin metadat s příslušnými omezeními je uvedena níže.

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;

Tabulka členů skupiny

V této části navrhneme Tabulku členů skupiny pro uložení členů skupiny. Stav člena lze použít ke sledování stavu členství a roli člena lze použít k identifikaci členských práv. Níže je uveden popis všech sloupců tabulky členů skupiny.

ID Jedinečné ID k identifikaci členství.
ID skupiny ID skupiny k identifikaci odpovídající skupiny.
ID uživatele ID uživatele k identifikaci odpovídajícího uživatele.
ID role Role pro kontrolu uživatelských oprávnění.
Stav Stav může být Nový, Odmítnutý, Aktivní nebo Blokovaný.
Vytvořeno v Ukládá datum a čas, kdy byla žádost o členství iniciována.
Aktualizováno dne Ukládá datum a čas, kdy byl člen aktualizován.
Poznámky Ukládá poznámky specifické pro členství.

Tabulka členů skupiny s příslušnými omezeními je uvedena níže.

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

Tabulka sledujících skupin

V této části navrhneme Tabulku sledujících skupin pro uložení sledujících skupiny. Typ sledujícího může být To se mi líbí, Nelíbí se mi nebo Sledovat. Níže je uveden popis všech sloupců tabulky sledujících skupin.

ID Jedinečné ID k identifikaci sledujícího.
ID skupiny ID skupiny k identifikaci odpovídající skupiny.
ID uživatele ID uživatele k identifikaci odpovídajícího uživatele.
Typ Typ sledujícího může být To se mi líbí, Nelíbí se mi nebo Sledovat.
Vytvořeno v Ukládá datum a čas, kdy byl sledující vytvořen.
Aktualizováno dne Ukládá datum a čas, kdy byl sledující aktualizován.

Tabulka sledujících skupin s příslušnými omezeními je uvedena níže.

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

Tabulka skupinových zpráv

V této části navrhneme Tabulku skupinových zpráv pro uložení zpráv skupinového chatu. Níže je uveden popis všech sloupců tabulky skupinových zpráv.

ID Jedinečné ID k identifikaci zprávy.
ID skupiny ID skupiny k identifikaci odpovídající skupiny.
ID uživatele ID uživatele k identifikaci odpovídajícího uživatele.
Zpráva Tělo zprávy.
Vytvořeno v Ukládá datum a čas, kdy byla zpráva vytvořena.
Aktualizováno dne Ukládá datum a čas, kdy byla zpráva aktualizována.

Tabulka skupinových zpráv s příslušnými omezeními je uvedena níže.

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;

Tabulka příspěvků skupiny

V této části navrhneme Tabulku příspěvků skupiny pro uložení skupinových příspěvků. Členové s příslušnou rolí mohou přispívat do skupiny. Níže je uveden popis všech sloupců tabulky skupinových příspěvků.

ID Jedinečné ID k identifikaci příspěvku.
ID skupiny ID skupiny k identifikaci odpovídající skupiny.
ID uživatele ID uživatele k identifikaci odpovídajícího uživatele.
Zpráva Tělo zprávy.
Vytvořeno v Ukládá datum a čas, kdy byl příspěvek vytvořen.
Aktualizováno dne Ukládá datum a čas, kdy byl příspěvek aktualizován.

Tabulka skupinových příspěvků s příslušnými omezeními je uvedena níže.

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;

Shrnutí

V tomto tutoriálu jsme diskutovali o návrhu databáze systému sociálních sítí pro správu uživatelů, přátel, sledujících, zpráv a skupin.

Do diskuse můžete zasílat své komentáře. Také by vás mohl zajímat návrh databáze aplikací Blog, Nákupní košík a Anketa a průzkumy. Kompletní schéma databáze je k dispozici také na GitHubu.


  1. CX_Oracle - import dat z Oracle do datového rámce Pandas

  2. SQL Server 2012 Service Pack 1 a kumulativní aktualizace 1

  3. Jak napsat Pandas Dataframe do modelu Django

  4. Skupinově maximum