Задать вопрос
@anatoly60

Какую архитектуру БД выбрать для чата аналогичного вконтакте?

Всем привет!

Посоветуйте архитектуру БД для чата с историей.

Есть таблица user, поля:
  • userId - уникальный id для каждого пользователя в системе
  • name - имя пользователя


Каждый пользователь может начать диалог с другим пользователем, нужно хранить переписку (текст, дата отправки) и количество непрочитанных сообщений. Между любыми двумя пользователями может быть только один чат. Чаты приватные, не групповые (макс 2 человека). Хранить последние 1000 сообщений.

Можно добавить в черный список собеседника (игнор).

Нужно эффективно, за один запрос получить все чаты (собеседников) для конкретного пользователя (за исключением игнорируемых собеседников), сортировка - сначала непрочитанные сообщения, затем по дате последнего обновления.
  • Вопрос задан
  • 1918 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Ну сделай таблицу диалоги и сообщения.

Сообщения ( ид_сообщения, текст, дата_отправки, статус(прочитан или нет), ид_диалога)

Диалоги (ид_диалога, ид_клиента1, ид_клиента2)

Правда получаеться двойная связь. А количество не прочитанных там же отображается не конкретного диалога, а всех. Так что просто запросом.

Ну можно только с одной таблицей сообщения. Где хранить все.
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Что мешает создать плоскую таблицу?

user_id | co_user_id | message | isaread

select * from messages where user_id = 3456754
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы