Mysql
 sql >> база данни >  >> RDS >> Mysql

Ръководство за проектиране на база данни за система за социални мрежи в MySQL

Този урок предоставя пълните стъпки за проектиране на схема на база данни на системата за социални мрежи за управление на потребителите, приятелите, последователите, групите и съобщенията.

Диаграмата на взаимоотношенията на обектите или визуалният дизайн на базата данни е показан по-долу.

Системна база данни за социални мрежи

Можете също да посетите популярните уроци, включително Как да инсталирате MySQL 8 на Ubuntu 20.04 LTS, Как да инсталирате MySQL 8 на Windows, Как да инсталирате MySQL Workbench на Ubuntu, Как да инсталирате MySQL 8 с Workbench на Windows 10, RBAC база данни в MySql, База данни за блогове в MySql, База данни за тестове в MySQL, База данни за анкети и анкети в MySQL, База данни за онлайн пазарска кошница в MySQL, База данни за инвентаризация в MySQL и Научете основни SQL заявки в MySQL.

Системна база данни за социални мрежи

Първата стъпка е да създадете системната база данни за социални мрежи. Може да се създаде с помощта на заявката, както е показано по-долу.

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

Използвал съм набора от знаци utf8mb4 за поддръжка на широк спектър от знаци.

Таблица с потребители

В този раздел ще проектираме Таблица на потребителите за съхраняване на потребителска информация. По-долу е посочено описанието на всички колони на потребителската таблица.

Id Уникалният идентификатор за идентифициране на потребителя.
Име Първото име на потребителя.
Биринно име Биринното име на потребителя.
Фамилия Фамилията на потребителя.
Мобилни Мобилният номер на потребителя. Може да се използва за влизане и регистрация.
Имейл Имейлът на потребителя. Може да се използва за влизане и регистрация.
Хеш на парола Хешът на паролата, генериран от подходящия алгоритъм. Трябва да избягваме съхраняването на обикновени или криптирани пароли.
Регистриран в Тази колона може да се използва за изчисляване на живота на потребителя с приложението.
Последно влизане Може да се използва за идентифициране на последното влизане на потребителя.
Въведение Краткото представяне на потребителя.
Профил Подробности за потребителя.

Потребителската таблица със съответните ограничения е показана по-долу.

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

Таблица с приятели на потребителя

В този раздел ще проектираме Таблица с приятели на потребителите за съхраняване на приятелите на потребителите. Статусът на приятел може да се използва за проследяване на състоянието на приятелство, а типът може да се използва за определяне на типа приятелство. По-долу е посочено описанието на всички колони на таблицата с приятели.

Id Уникалният идентификатор за идентифициране на приятелството.
Идентификатор на източника Потребителският идентификатор за идентифициране на потребителя, който е инициирал приятелството.
Идентификатор на целта Потребителският идентификатор на приятеля.
Тип Типът за класифициране на приятели. Може да е училище, колеж или познанство.
Състояние Състоянието може да бъде Нов, Отхвърлен или Активен.
Създаден в Той съхранява датата и часа, на които е инициирана молбата за приятелство.
Актуализирано в Той съхранява датата и часа, на които е актуализирана заявката за приятелство.
Бележки Той съхранява бележките, специфични за приятелството.

Таблицата с приятели на потребителя със съответните ограничения е показана по-долу.

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

Таблица за последователи на потребители

В този раздел ще проектираме Таблица за последователи на потребители за съхраняване на последователите на потребителите. Типът последовател може да се използва за определяне на типа последовател между Харесвам, Не харесвам или Следвам. По-долу е посочено описанието на всички колони в таблицата за последователи на потребители.

Id Уникалният идентификатор за идентифициране на последователя.
Идентификатор на източника Идентификаторът на потребителя за идентифициране на последователя потребител.
Идентификатор на целта Потребителският идентификатор за идентифициране на следния потребител.
Тип Типът за класифициране на последователите. Може да бъде Харесвам, Не харесвам или Следвайте.
Създаден в Той съхранява датата и часа, в които е създаден последователят.
Актуализирано в Той съхранява датата и часа, в които последователят е бил актуализиран.

Таблицата за последователи на потребители със съответните ограничения е показана по-долу.

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

Таблица с потребителски съобщения

В този раздел ще проектираме Таблица с потребителски съобщения за да съхранявате съобщенията за потребителски чат. По-долу е споменато описанието на всички колони на таблицата с потребителски съобщения.

Id Уникалният идентификатор за идентифициране на съобщението.
Идентификатор на източника Потребителският идентификатор за идентифициране на подателя.
Идентификатор на целта Потребителският идентификатор за идентифициране на получателя.
Съобщение Тялото на съобщението.
Създаден в Той съхранява датата и часа, в които е създадено съобщението.
Актуализирано в Той съхранява датата и часа, в които съобщението е актуализирано.

Таблицата с потребителски съобщения със съответните ограничения е показана по-долу.

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;

Таблица с публикации на потребители

В този раздел ще проектираме Таблица с публикации на потребители за съхраняване на потребителските публикации. От подателя може да се изисква да разреши на другите потребители с подходящи разрешения да публикуват на стената на потребителя. По-долу е посочено описанието на всички колони на таблицата с потребителски публикации.

Id Уникалният идентификатор за идентифициране на публикацията.
Потребителски идентификатор Потребителският идентификатор за идентифициране на съответния потребител.
Идент. № на подателя Идентификаторът на подателя за идентифициране на съответния подател.
Съобщение Тялото на съобщението.
Създаден в Той съхранява датата и часа, на които е създадена публикацията.
Актуализирано в Той съхранява датата и часа, в които публикацията е била актуализирана.

Таблицата с потребителски публикации със съответните ограничения е показана по-долу.

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;

Групова таблица

В този раздел ще проектираме Групова таблица за съхраняване на груповите данни. По-долу е посочено описанието на всички колони на таблицата на групите.

Id Уникалният идентификатор за идентифициране на групата.
Създадено от Идентификацията на потребителя за идентифициране на потребителя, който е регистрирал групата.
Актуализирано от Потребителският идентификатор за идентифициране на потребителя, който е актуализирал групата.
Заглавие Заглавието на групата.
Метазаглавие Мета заглавието, което ще се използва за заглавие на браузъра и SEO цели.
Плюс Плужката за образуване на уникалния URL адрес.
Резюме Резюме за споменаване на ключови акценти.
Състояние Състоянието на групата може да бъде Нова, Одобрена, Активна или Блокирана.
Създаден в Той съхранява датата и часа, в които е създадена групата.
Актуализирано в Той съхранява датата и часа, в които групата се актуализира.
Профил Колоната, използвана за съхраняване на данните за профила на групата.
Съдържание Колоната, използвана за съхраняване на допълнителните подробности за групата.

Той използва състоянието на колоната за проследяване на състоянието на групата. Състоянието може да бъде Нов, Одобрен, Активен или Блокиран. Груповата таблица със съответните ограничения е както е показано по-долу.

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;

Мета група

Груповата метатаблица може да се използва за съхраняване на допълнителна информация за групи, включително URL адреса на груповия банер и т.н. По-долу е посочено описанието на всички колони на груповата метатаблица.

Id Уникалният идентификатор за идентифициране на групата мета.
Идентификатор на групата Идентификаторът на групата за идентифициране на родителската група.
Ключ Ключът, идентифициращ мета.
Съдържание Колоната, използвана за съхраняване на метаданните на групата.

Груповата метатаблица със съответните ограничения е както е показано по-долу.

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;

Таблица с членове на групата

В този раздел ще проектираме Таблица с членове на групата за съхраняване на членовете на групата. Статусът на член може да се използва за проследяване на статуса на членство, а ролята на член може да се използва за идентифициране на привилегиите на члена. По-долу е споменато описанието на всички колони на таблицата с членове на групата.

Id Уникалният идентификатор за идентифициране на членството.
Идентификатор на групата Идентификаторът на групата за идентифициране на съответната група.
Потребителски идентификатор Потребителският идентификатор за идентифициране на съответния потребител.
Идентификатор на ролята Ролята за проверка на привилегиите на потребителя.
Състояние Състоянието може да бъде Нов, Отхвърлен, Активен или Блокиран.
Създаден в Той съхранява датата и часа, в които е инициирана заявката за член.
Актуализирано в Той съхранява датата и часа, в които членът е бил актуализиран.
Бележки Той съхранява бележките, специфични за членството.

Таблицата с членове на групата със съответните ограничения е показана по-долу.

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

Таблица за последователи на група

В този раздел ще проектираме Таблица за последователи на група за съхраняване на последователите на групата. Типът последовател може да бъде Харесвам, Не харесвам или Следвам. По-долу е посочено описанието на всички колони в таблицата за последователи на групата.

Id Уникалният идентификатор за идентифициране на последователя.
Идентификатор на групата Идентификаторът на групата за идентифициране на съответната група.
Потребителски идентификатор Потребителският идентификатор за идентифициране на съответния потребител.
Тип Типът последовател може да бъде Харесвам, Не харесвам или Следвам.
Създаден в Той съхранява датата и часа, в които е създаден последователят.
Актуализирано в Той съхранява датата и часа, в които последователят е бил актуализиран.

Таблицата за последователи на групата със съответните ограничения е показана по-долу.

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

Таблица с групови съобщения

В този раздел ще проектираме Таблица за групови съобщения за да съхранявате съобщенията за групов чат. По-долу е посочено описанието на всички колони на таблицата с групови съобщения.

Id Уникалният идентификатор за идентифициране на съобщението.
Идентификатор на групата Идентификаторът на групата за идентифициране на съответната група.
Потребителски идентификатор Потребителският идентификатор за идентифициране на съответния потребител.
Съобщение Тялото на съобщението.
Създаден в Той съхранява датата и часа, в които е създадено съобщението.
Актуализирано в Той съхранява датата и часа, в които съобщението е актуализирано.

Таблицата с групови съобщения със съответните ограничения е показана по-долу.

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;

Групова таблица с публикации

В този раздел ще проектираме Таблица за групови публикации за да съхранявате груповите публикации. Членовете с подходяща роля могат да публикуват в групата. По-долу е посочено описанието на всички колони на таблицата за групови публикации.

Id Уникалният идентификатор за идентифициране на публикацията.
Идентификатор на групата Идентификаторът на групата за идентифициране на съответната група.
Потребителски идентификатор Потребителският идентификатор за идентифициране на съответния потребител.
Съобщение Тялото на съобщението.
Създаден в Той съхранява датата и часа, на които е създадена публикацията.
Актуализирано в Той съхранява датата и часа, в които публикацията е била актуализирана.

Таблицата за групови публикации със съответните ограничения е показана по-долу.

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;

Резюме

В този урок обсъдихме дизайна на база данни на система за социални мрежи за управление на потребители, приятели, последователи, съобщения и групи.

Можете да изпратите вашите коментари, за да се присъедините към дискусията. Може също да се интересувате от проектирането на базата данни на приложенията за блог, количка и анкета и анкета. Пълната схема на базата данни е достъпна и на GitHub.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Повторете ред с резултати няколко пъти и номерирайте редовете

  2. Отдалечената връзка с MySQL се проваля с неизвестен метод за удостоверяване

  3. Грешка в PHP, MySQL:Броят на колоните не съвпада с броя на стойностите на ред 1

  4. MAKEDATE() Примери – MySQL

  5. Как работи MySQL CASE?