Задать вопрос
anton_reut
@anton_reut
Начинающий веб-разработчик

Архитектура таблиц БД для функционала Личных сообщений, так логично?

Всем привет. Решил сделать для своего учебного проекта доски объявлений функционал личных сообщений между юзерами и вижу что в принципе для реализации нужны всего две таблицы:

Таблица 1. - Chat (здесь содержится список начатых диалогов)
Столбцы:
id - стандартный айдишник
abonent_1 - идентификатор первого участника чата
abonent_2 - идентификатор второго участника чата

Таблица 2. - Messages (здесь содержится список сообщений которые потом раскидываются по диалогам)
Столбцы:
id - стандартный айдишник
chat_id - идентификатор диалога к которому принадлежит сообщение
create_time - время когда отправлено, для сортировки
author_id - идентификатор отправителя
recepient_id - идентификатор получателя
message - само тело сообщения, просто текст для начала

В результате если Юзер1 отправляет сообщение Юзеру2 то:
1. Создается сущность диалога в таблице Chat, содержащая id и идентификаторы Юзера1 и Юзера2
2. Создается сущность первого сообщения в таблице Messages, содержащая свой id, идентификатор Диалога для группировки сообщений ну и заполняем прочие поля, думаю ясно как исходя из их названий.

Для чего я делаю сущность Chat? Чтобы сообщения не сыпались единой кучей и можно было ответить конкретному юзеру.

Что думаете?
P.S. Я понимаю что изобретаю велосипеды но для обучения и понимания считаю это важным, а не лезть сразу в готовые фреймворки
  • Вопрос задан
  • 938 просмотров
Подписаться 3 Средний 6 комментариев
Пригласить эксперта
Ответы на вопрос 2
@gvalex
В Chat есть id обоих участников диалога, поэтому в Messages можно хранить только id отправителя (ну, или получателя).
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Групповые чаты не поддерживаются?

Я бы делал таблицы
user: uid, name, и так далее
channel: опционально название канала, какие-то настройки
channel_has_user: channelid, userId (не обязательно двух, можно больше)
message: само сообщение, authorUid, channelId
Ответ написан
Ваш ответ на вопрос

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

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