sql >> Databasteknik >  >> RDS >> Mysql

Guide till designdatabas för sociala nätverkssystem i MySQL

Denna handledning innehåller de fullständiga stegen för att utforma ett databasschema för det sociala nätverkssystemet för att hantera användare, vänner, följare, grupper och meddelanden.

Entity Relationship Diagram eller visuell databasdesign visas nedan.

Systemdatabas för sociala nätverk

Du kan också besöka de populära handledningarna inklusive Hur man installerar MySQL 8 på Ubuntu 20.04 LTS, Hur man installerar MySQL 8 på Windows, Hur man installerar MySQL Workbench på Ubuntu, Hur man installerar MySQL 8 med Workbench på Windows 10, RBAC Database i MySql, Bloggdatabas i MySQL, Frågesportdatabas i MySQL, Enkät- och undersökningsdatabas i MySQL, Online Shopping Cart Database i MySQL, Inventory Database i MySQL och Lär dig grundläggande SQL-frågor i MySQL.

Systemdatabas för sociala nätverk

Det allra första steget är att skapa databasen för sociala nätverkssystem. Den kan skapas med hjälp av frågan som visas nedan.

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

Jag har använt teckenuppsättningen utf8mb4 för att stödja ett stort antal tecken.

Användartabell

I det här avsnittet kommer vi att utforma användartabellen för att lagra användarinformation. Nedan nämns beskrivningen av alla kolumner i användartabellen.

Id Det unika ID:t för att identifiera användaren.
Förnamn Användarens förnamn.
Mellannamn Användarens mellannamn.
Efternamn Användarens efternamn.
Mobil Användarens mobilnummer. Den kan användas för inloggning och registreringsändamål.
E-post Användarens e-postadress. Den kan användas för inloggning och registreringsändamål.
Lösenordshash Lösenords-hash som genereras av lämplig algoritm. Vi måste undvika att lagra vanliga eller krypterade lösenord.
Registrerad på Denna kolumn kan användas för att beräkna användarens livslängd med programmet.
Senaste inloggning Den kan användas för att identifiera användarens senaste inloggning.
Intro Den korta introduktionen av användaren.
Profil Användarinformation.

Användartabellen med lämpliga begränsningar visas nedan.

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

Användarväntabell

I det här avsnittet kommer vi att utforma användarväntabellen för att lagra användarens vänner. Vänstatus kan användas för att spåra vänskapsstatus och typ kan användas för att ange typ av vänskap. Nedan nämns beskrivningen av alla kolumner i Användarvän-tabellen.

Id Det unika ID:t för att identifiera vänskapen.
Käll-ID Användar-id för att identifiera användaren som startade vänskapen.
Mål-ID Vännens användar-ID.
Typ Typen för att klassificera vänner. Det kan vara skola, högskola eller bekantskap.
Status Statusen kan vara Ny, Avvisad eller Aktiv.
Skapat vid Den lagrar datum och tid då vänförfrågan initierades.
Uppdaterad kl. Den lagrar datum och tid då vänförfrågan uppdaterades.
Anteckningar Den lagrar de anteckningar som är specifika för vänskapen.

Användarväntabellen med lämpliga begränsningar visas nedan.

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

Tabell för användarföljare

I det här avsnittet kommer vi att utforma användarföljaretabellen för att lagra användarnas följare. Följartypen kan användas för att ange typen av följare bland Gilla, Ogilla eller Följ. Nedan nämns beskrivningen av alla kolumner i Användarföljartabellen.

Id Det unika ID:t för att identifiera följaren.
Käll-ID Användar-ID för att identifiera den som följer användaren.
Mål-ID Användar-ID för att identifiera följande användare.
Typ Typen för att klassificera följare. Det kan vara Gilla, Ogilla eller Följ.
Skapat vid Den lagrar datum och tid då följaren skapades.
Uppdaterad kl. Den lagrar datum och tid då följaren uppdaterades.

Användarföljartabellen med lämpliga begränsningar visas nedan.

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

Tabell för användarmeddelanden

I det här avsnittet kommer vi att utforma tabellen för användarmeddelanden för att lagra användarchattmeddelanden. Nedan nämns beskrivningen av alla kolumner i användarmeddelandetabellen.

Id Det unika ID:t för att identifiera meddelandet.
Käll-ID Användar-ID för att identifiera avsändaren.
Mål-ID Användar-ID för att identifiera mottagaren.
Meddelande Meddelandetexten.
Skapat vid Den lagrar datum och tid då meddelandet skapades.
Uppdaterad kl. Den lagrar datum och tid då meddelandet uppdaterades.

Användarmeddelandetabellen med lämpliga begränsningar visas nedan.

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;

Tabell för användarinlägg

I det här avsnittet kommer vi att utforma tabellen för användarinlägg för att lagra användarinläggen. Avsändaren kan behöva tillåta andra användare med lämplig behörighet att göra inlägg på användarväggen. Nedan nämns beskrivningen av alla kolumner i användarinläggstabellen.

Id Det unika ID:t för att identifiera inlägget.
Användar-ID Användar-ID för att identifiera motsvarande användare.
Avsändar-ID Avsändar-id för att identifiera motsvarande avsändare.
Meddelande Meddelandetexten.
Skapat vid Den lagrar datum och tid då inlägget skapades.
Uppdaterad kl. Den lagrar datum och tid då inlägget uppdaterades.

Användarinläggstabellen med lämpliga begränsningar visas nedan.

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;

Grupptabell

I det här avsnittet kommer vi att utforma Grupptabellen för att lagra gruppdata. Nedan nämns beskrivningen av alla kolumner i grupptabellen.

Id Det unika ID:t för att identifiera gruppen.
Skapad av Användar-ID för att identifiera användaren som registrerade gruppen.
Uppdaterad av Användar-ID för att identifiera användaren som uppdaterade gruppen.
Titel Gruppens titel.
Metatitel Metatiteln som ska användas för webbläsartitel och SEO-ändamål.
Snigel Snigeln för att bilda den unika URL:en.
Sammanfattning Sammanfattningen för att nämna de viktigaste höjdpunkterna.
Status Gruppens status kan vara Ny, Godkänd, Aktiv eller Blockerad.
Skapat vid Den lagrar datum och tid då gruppen skapades.
Uppdaterad kl. Den lagrar datum och tid då gruppen uppdateras.
Profil Kolumnen som används för att lagra profilinformationen för gruppen.
Innehåll Kolumnen som används för att lagra ytterligare information om gruppen.

Den använder kolumnstatus för att spåra gruppens status. Statusen kan vara antingen Ny, Godkänd, Aktiv eller Blockerad. Grupptabellen med lämpliga begränsningar är som visas nedan.

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;

Grupp Meta

Gruppmetatabellen kan användas för att lagra ytterligare information om grupper inklusive webbadressen för gruppbanner etc. Nedan nämns en beskrivning av alla kolumner i gruppmetatabellen.

Id Det unika ID:t för att identifiera gruppens meta.
Grupp-ID Grupp-id för att identifiera den överordnade gruppen.
Nyckel Nyckeln som identifierar meta.
Innehåll Kolumnen som används för att lagra gruppens metadata.

Gruppmetatabellen med lämpliga begränsningar visas nedan.

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;

Gruppmedlemstabell

I det här avsnittet kommer vi att utforma tabellen för gruppmedlemmar för att lagra gruppmedlemmarna. Medlemsstatusen kan användas för att spåra medlemsstatusen och medlemsrollen kan användas för att identifiera medlemsprivilegierna. Nedan nämns beskrivningen av alla kolumner i gruppmedlemstabellen.

Id Det unika ID:t för att identifiera medlemskapet.
Grupp-ID Grupp-ID för att identifiera motsvarande grupp.
Användar-ID Användar-ID för att identifiera motsvarande användare.
Roll-ID Rollen att kontrollera användarbehörigheter.
Status Statusen kan vara Ny, Avvisad, Aktiv eller Blockerad.
Skapat vid Den lagrar datum och tid då medlemsförfrågan initierades.
Uppdaterad kl. Den lagrar datum och tid då medlemmen uppdaterades.
Anteckningar Den lagrar de anteckningar som är specifika för medlemskapet.

Gruppmedlemstabellen med lämpliga begränsningar visas nedan.

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

Tabell för gruppföljare

I det här avsnittet kommer vi att utforma tabellen för gruppföljare för att lagra gruppföljarna. Följartypen kan vara Gilla, Ogilla eller Följ. Nedan nämns beskrivningen av alla kolumner i gruppföljartabellen.

Id Det unika ID:t för att identifiera följaren.
Grupp-ID Grupp-ID för att identifiera motsvarande grupp.
Användar-ID Användar-ID för att identifiera motsvarande användare.
Typ Följartypen kan vara Gilla, Ogilla eller Följ.
Skapat vid Den lagrar datum och tid då följaren skapades.
Uppdaterad kl. Den lagrar datum och tid då följaren uppdaterades.

Gruppföljartabellen med lämpliga begränsningar visas nedan.

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

Gruppmeddelandetabell

I det här avsnittet kommer vi att utforma gruppens meddelandetabell för att lagra gruppchattmeddelanden. Nedan nämns beskrivningen av alla kolumner i gruppmeddelandetabellen.

Id Det unika ID:t för att identifiera meddelandet.
Grupp-ID Grupp-ID för att identifiera motsvarande grupp.
Användar-ID Användar-ID för att identifiera motsvarande användare.
Meddelande Meddelandetexten.
Skapat vid Den lagrar datum och tid då meddelandet skapades.
Uppdaterad kl. Den lagrar datum och tid då meddelandet uppdaterades.

Gruppmeddelandetabellen med lämpliga begränsningar visas nedan.

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;

Gruppposttabell

I det här avsnittet kommer vi att utforma tabellen för gruppinlägg för att lagra gruppinläggen. Medlemmarna som har rätt roll kan göra inlägg i gruppen. Nedan nämns beskrivningen av alla kolumner i gruppposttabellen.

Id Det unika ID:t för att identifiera inlägget.
Grupp-ID Grupp-ID för att identifiera motsvarande grupp.
Användar-ID Användar-ID för att identifiera motsvarande användare.
Meddelande Meddelandetexten.
Skapat vid Den lagrar datum och tid då inlägget skapades.
Uppdaterad kl. Den lagrar datum och tid då inlägget uppdaterades.

Gruppposttabellen med lämpliga begränsningar visas nedan.

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;

Sammanfattning

I den här handledningen har vi diskuterat databasdesignen för ett socialt nätverkssystem för att hantera användare, vänner, följare, meddelanden och grupper.

Du kan skicka in dina kommentarer för att delta i diskussionen. Du kanske också är intresserad av att designa databasen med applikationerna blogg, kundvagn och omröstning och undersökning. Det fullständiga databasschemat finns också tillgängligt på GitHub.


  1. dbms_output.put_line

  2. Hitta det vanligaste värdet i SQL-kolumnen

  3. SQLAlchemy PÅ DUBLIKATNYCKELUPPDATERING

  4. Tillämpa fältregler med hjälp av klassificering