Course Content
Data Structures & Algorithms
Full Stack Web Development
Understanding and playing with DOM (Document Object Model)
0/2
MERN project
0/2
Low Level System Design
LLD Topics
High Level System Design
Fast-Track to Full Spectrum Software Engineering
Database Design & Schema of Messenger

When designing the database for a messaging system like Messenger, the main goal is to store user data, messages, media files, real-time communication logs, and other related information in an efficient and scalable way. Let’s explore the different tables and relationships within the database schema of a typical Messenger application.

 

The database design is a critical part of the system because it ensures data is structured optimally for quick access, reliability, and scalability.

 

Key Database Components

  1. Users Table: This table stores all information related to individual users.
  2. Messages Table: This table stores the actual messages sent between users.
  3. Groups Table: This table stores information about group chats.
  4. Group Members Table: This table stores the members of each group chat.
  5. Media Files Table: This table stores information related to media files (images, videos, etc.) sent in the chat.
  6. Calls Table: This table stores details related to voice and video calls.
  7. Notifications Table: This table stores notifications sent to users.
  8. Message Read Status Table: This table tracks the read/unread status of messages.

 

Database Schema Overview

 


1. Users Table

This table stores information about each user.

 

Field Name Data Type Description
user_id INT (PK) Unique identifier for each user (primary key).
username VARCHAR(255) User’s unique username.
email VARCHAR(255) User’s email address (used for login).
password_hash VARCHAR(255) Hashed password for secure authentication.
first_name VARCHAR(100) First name of the user.
last_name VARCHAR(100) Last name of the user.
profile_picture VARCHAR(255) URL to the user’s profile picture.
status VARCHAR(255) User’s current status message.
last_active TIMESTAMP Last active time of the user.
created_at TIMESTAMP Timestamp of account creation.
updated_at TIMESTAMP Timestamp of the last update to the user’s profile.


2. Messages Table

This table stores the messages sent between users.

 

Field Name Data Type Description
message_id INT (PK) Unique identifier for each message (primary key).
sender_id INT (FK) ID of the user who sent the message (foreign key to Users).
receiver_id INT (FK) ID of the user who received the message (foreign key to Users).
message_type ENUM(‘text’, ‘image’, ‘video’, ‘audio’) Type of the message (text, media).
message_content TEXT Content of the message (for text messages) or URL for media.
media_url VARCHAR(255) URL to the media file (if the message contains media).
timestamp TIMESTAMP Time when the message was sent.
is_read BOOLEAN Indicates whether the message has been read.
status ENUM(‘sent’, ‘delivered’, ‘seen’) Message status: sent, delivered, or seen.
conversation_id INT (FK) ID of the conversation this message belongs to (foreign key to Conversations table).


3. Groups Table

This table stores information about group chats.

 

Field Name Data Type Description
group_id INT (PK) Unique identifier for each group (primary key).
group_name VARCHAR(255) Name of the group.
group_picture VARCHAR(255) URL to the group’s profile picture.
created_by INT (FK) ID of the user who created the group (foreign key to Users).
created_at TIMESTAMP Timestamp of group creation.


4. Group Members Table

This table stores the members of each group.

 

Field Name Data Type Description
group_member_id INT (PK) Unique identifier for the group membership (primary key).
group_id INT (FK) ID of the group (foreign key to Groups table).
user_id INT (FK) ID of the user who is a member of the group (foreign key to Users).
role ENUM(‘admin’, ‘member’) Role of the user in the group (admin/member).
joined_at TIMESTAMP Timestamp when the user joined the group.


5. Media Files Table

This table stores information about the media files sent in messages.

 

Field Name Data Type Description
media_id INT (PK) Unique identifier for each media file (primary key).
message_id INT (FK) ID of the message associated with this media (foreign key to Messages).
media_type ENUM(‘image’, ‘video’, ‘audio’) Type of media (image, video, audio).
media_url VARCHAR(255) URL of the media file.
media_size INT Size of the media file in bytes.
timestamp TIMESTAMP Timestamp when the media was uploaded.


6. Calls Table

This table stores information about voice and video calls.

 

Field Name Data Type Description
call_id INT (PK) Unique identifier for each call (primary key).
caller_id INT (FK) ID of the user who initiated the call (foreign key to Users).
receiver_id INT (FK) ID of the user who received the call (foreign key to Users).
call_type ENUM(‘voice’, ‘video’) Type of the call (voice or video).
call_start_time TIMESTAMP Timestamp when the call started.
call_end_time TIMESTAMP Timestamp when the call ended.
call_status ENUM(‘initiated’, ‘in_progress’, ‘ended’) Current status of the call.
duration INT Duration of the call in seconds.


7. Notifications Table

This table stores notifications for users (such as new message alerts, friend requests, etc.).

 

Field Name Data Type Description
notification_id INT (PK) Unique identifier for each notification (primary key).
user_id INT (FK) ID of the user receiving the notification (foreign key to Users).
notification_type ENUM(‘message’, ‘call’, ‘friend_request’, ‘group_invite’) Type of notification.
message TEXT Notification message content.
timestamp TIMESTAMP Timestamp when the notification was generated.
read_status BOOLEAN Whether the notification has been read.


8. Message Read Status Table

This table tracks whether a message has been read by the recipient.

 

Field Name Data Type Description
message_id INT (FK) ID of the message (foreign key to Messages).
user_id INT (FK) ID of the user who has read the message (foreign key to Users).
read_status BOOLEAN Whether the user has read the message.
timestamp TIMESTAMP Timestamp when the message was read.

 

Relationships Between Tables

  • Users to Messages: A user can send multiple messages, and a message is sent by one user (sender).
  • Users to Group Members: A user can belong to multiple groups, and each group can have multiple users (many-to-many relationship).
  • Messages to Media Files: A message can have zero or more associated media files (one-to-many relationship).
  • Messages to Group Messages: A message can be sent to multiple group members (many-to-many relationship).
  • Calls to Users: A call has two participants — a caller and a receiver (many-to-one relationship).

 

Conclusion

The database schema for Messenger is designed to handle the core features such as messaging, group chat management, media storage, notifications, and real-time calls. With this relational database structure, data is efficiently managed and organized, allowing for fast retrieval and scalability.

0% Complete
WhatsApp Icon

Hi Instagram Fam!
Get a FREE Cheat Sheet on System Design.

Hi LinkedIn Fam!
Get a FREE Cheat Sheet on System Design

Loved Our YouTube Videos? Get a FREE Cheat Sheet on System Design.