Архитектура таблиц БД для функционала Личных сообщений, так логично?
Всем привет. Решил сделать для своего учебного проекта доски объявлений функционал личных сообщений между юзерами и вижу что в принципе для реализации нужны всего две таблицы:
Таблица 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. Я понимаю что изобретаю велосипеды но для обучения и понимания считаю это важным, а не лезть сразу в готовые фреймворки
1. Зачем сущность Chat? Вот я открываю свою переписку в любом мессенджере и не вижу там раздения истории сообщений на какие-то "чаты".
2. Даже если сущность "чат" нужна зачем-то, она не гибкая. В вашем чате участвуют только два юзера, а завтра, когда вам понадобиться конференция, придется все переделывать.
Так что я бы до поры "чат" выбросил. А вот когда он реально понадобиться сделал бы его универсальным.
orbit070, визуально вроде да, а по факту это просто отобранные сообщения вида "я <-> какой-то пользователь", просто история сообщений. Сущности "чата" для этого не нужно.
EVGENY T., да как не нужно. Вы когда в мессенджер заходите что первым делом видите? Список диалогов/чатов. Это полноценная сущность, к которой относятся сообщения между n-ым количеством лиц, как правило между двумя, если речь об лс
Я бы делал таблицы
user: uid, name, и так далее
channel: опционально название канала, какие-то настройки
channel_has_user: channelid, userId (не обязательно двух, можно больше)
message: само сообщение, authorUid, channelId
Антон Р., да
даже если у вас всего два человека в чате, это лучше чем abonent_1 и abonent_2
Сегодня Вася пишет Маше, а завтра Маша пришет Васе. И они что, местами меняются? Или вы всегда выбираете по двум полям?