Файл msgstore.db — это SQLite база данных, которая хранит всю локальную историю сообщений WhatsApp, а также сопутствующую информацию. Для эффективного управления и быстрого доступа к данным WhatsApp использует структуру реляционной базы данных с несколькими взаимосвязанными таблицами. Эти таблицы содержат информацию о сообщениях, чатах, контактах, группах и прочем.
В данной статье разберём, какие основные таблицы присутствуют в msgstore.db и каким образом они связаны между собой, образуя целостную структуру данных.
1. Основные таблицы базы данных
В WhatsApp msgstore.db можно выделить несколько ключевых таблиц:
messages — хранит сообщения и метаданные о них.
chat_list — список чатов пользователя.
contacts — информация о контактах.
groups (или group_participants) — данные о группах и их участниках.
participants — участники групп (в некоторых версиях).
chat_view — представление чатов с дополнительными сведениями.
message_thumbnails — миниатюры медиафайлов.
call_log — журнал звонков.
2. Таблица messages (сообщения)
Это основная таблица, которая содержит каждое отправленное или полученное сообщение:
Каждое сообщение имеет уникальный идентификатор rowid или key_id.
В поле key_remote_jid указывается ID чата или контакта, к которому относится сообщение (например, номер телефона для личных чатов или ID группы).
Другие поля содержат текст сообщения, метаданные (время, статус, тип медиа, путь к файлу и т.д.).
3. Таблица chat_list (список чатов)
Содержит перечень всех активных чатов пользователя.
Каждая запись имеет уникальный идентификатор чата key_remote_jid — точно такой же, как в таблице messages.
В таблице хранится информация о последнем сообщении, количестве непрочитанных сообщений, имени контакта или группы и пр.
4. Таблица contacts (контакты)
Содержит информацию о контактах пользователя.
Каждая запись содержит номер телефона, имя контакта, а также другие метаданные.
Идентификаторы контактов в таблице совпадают с key_remote_jid в messages и chat_list (для индивидуальных чатов).
5. Таблица group_participants (участники групп)
Хранит сведения о членах групповых чатов.
Каждая запись содержит ID группы (group_jid) и ID участника (participant_jid).
Служит связующим звеном между группами и пользователями.
Позволяет определить, кто входит в конкретную группу.
6. Взаимосвязи между таблицами
a) messages — chat_list
В таблице messages поле key_remote_jid указывает, к какому чату относится сообщение.
В таблице chat_list key_remote_jid служит уникальным идентификатором чата.
Таким образом, по идентификатору чата можно получить все сообщения, относящиеся к нему.
b) chat_list — contacts
Для личных чатов key_remote_jid совпадает с номером телефона из contacts.
Для групповых чатов — это идентификатор группы.
По этой связи WhatsApp получает имя и аватар контакта для отображения в списке чатов.
c) group_participants — contacts
В таблице group_participants participant_jid — это ID участника, совпадающий с контактами в таблице contacts.
По этой связи определяется, кто именно входит в группу.
d) messages — group_participants
По полю key_remote_jid в messages можно понять, что сообщение относится к группе.
Информация из group_participants показывает, кто может читать и писать в группе.
7. Пример структуры запроса
Чтобы получить все сообщения из конкретного чата, связывают таблицы messages и chat_list по key_remote_jid.
Для отображения имени отправителя в групповом сообщении добавляют связь с contacts через sender_jid в messages.
Для получения списка участников группы используется group_participants, связанная с contacts.
8. Дополнительные связи
Таблица call_log связана с contacts и chat_list по База данных whatsapp в Малайзии идентификаторам, чтобы отображать историю звонков с конкретными контактами.
Таблица message_thumbnails связана с messages для отображения превью медиа.
9. Итоговая модель
chat_list — центральный элемент, который связывает переписки с контактами и группами.
messages — детализирует содержимое переписки.
contacts — содержит справочную информацию о пользователях.
group_participants — обеспечивает связь пользователей с группами.
Заключение
Связи между таблицами в базе данных msgstore.db WhatsApp строятся вокруг уникальных идентификаторов чатов и пользователей (jid). Эти связи обеспечивают целостность данных и позволяют приложению эффективно извлекать всю необходимую информацию — от списка чатов до полного содержимого переписки и состава групп. Такая структура характерна для реляционных баз данных и способствует быстрой работе, масштабируемости и безопасности хранения данных.