В чате должны быть созданы следующие таблицы:
- таблица со списком чатов
- таблица со списком участников чата
- таблица со списком сообщений
- таблица со статусами сообщений
Как вообще, должен работать чат. У вас есть пользователи, которые могут общаться в чате. Чат может состоять из нескольких групп (таблица chat), по сути, из отдельных чатов в каждом из которых могут общаться пользователи (таблица party). Сообщения каждого чата добавляются (таблица messages) от участников чата, которым можно показывать уведомления о добавлении новых сообщений и проверять, какие сообщения пользователь уже прочитал (таблица message_status).
Полагаю, что у вас уже есть таблица users, в которой хранятся пользователи.
Таблица со списком групп чата
В таблице со списком групп чата будут храниться данные группах чата. Таблица выглядит следующим образом:
Наименование | Описание |
chat_id | порядковый id чата |
name | заголовок чата, его название |
user_id | id пользователя создавшего чат |
Таблица со списком участников чата
В таблице списка участников чата будет храниться связь между группой чата и пользователями, которые участвуют в беседе группы чата. Таблица выглядит следующим образом:
Наименование | Описание |
chat_id | id группы чата |
user_id | id пользователя, который учавствует в переписке чата |
Таблица со списком сообщений
В таблице со списком сообщений будут храниться сообщения, которые пользователи пишут друг другу в чате. Таблица выглядит следующим образом:
Наименование | Описание |
message_id | порядковый id сообщения |
chat_id | id чата |
user_id | id пользователя, который добавил сообщение |
contect | содержимое сообщения |
date_create | дата добавления сообщения |
Таблица со статусами сообщений
В таблице со статусами сообщений будут храниться статусы уведомлений, определяющих просмотрел ли определенный пользователь новое добавленное сообщение. Таблица выглядит следующим образом:
Наименование | Описание |
message_id | id сообщения |
user_id | id пользователя |
is_read | прочитано ли сообщение |
Доводилось ли вам создавать чат для своего сайта? Если да, то какая архитектура в нем используется?
Есть куча готовый чат ботов, поэтому даже не нужно ничего проектировать.
поле "content" во второй таблице
Вот мой небольшой апгрейд и доработки, который понадобились в проекте: В таблицу со списком участников чата (party) добавлено поле date_create - дата добавление участника, status - статус участника (забанен, модератор,...). В последней таблице со статусами сообщений (message_status), вместо поля is_read, добавлено поле status (прочитано, удалено,...). Так как получатель же может не только прочитать, но и удалить в своем диалоге сообщение (у себя), но оно останется у автора и других участников чата. А так отличная, простая и функциональная структура, спасибо автору!
Василий, спасибо за ваш комментарий!
как вы автарки воткнули?
аватарку можете загрузить в настройках аккаунта
а для чего вам последняя таблица? эти данные можно хранить и в таблице сообщений. если общение 1 на 1, то просмотренность выставляется только собеседником если общение групповое, то первым увидевшим
Последняя табличка для удобства. Верно, можно в принципе помечать в таблице сообщений, если собеседника всего двое. В отдельной таблице удобно хранить, когда в чате участвует больше 2 человек, чтобы у каждого собеседника было отмечено, прочитал он сообщение или нет.