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

Как правильно хранить переписку в БД в данном случае?

Пишу проект на java. В качестве СУБД выбрал mySql. Возникла потребность в хранении переписки между пользователями. В программе присутствует только диалог 1:1 никаких комнат и ничего подобного. Я думаю правильно хранить полностью всю переписку в одной таблице, но как правильно это реализовать? Плюс мне нужно как-то формировать историю сообщений. Из идей у меня такое:
|логин_отправителя|логин_получателя|текст_сообщения|дополнительный_параметр_сообщения|номер_предыдущего_сообщения| .
Но вот мне не нравится такая конструкция по причине, что , чтобы добавить новое сообщение, мне нужно знать номер предыдущего. И вдруг пользователи в раз отправят сообщение, и что получится? что два сообщения под одним номером? Как вообще тогда формировать смс? Правильно ли я составил таблицу?
  • Вопрос задан
  • 1138 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 3
tsklab
@tsklab
Здесь отвечаю на вопросы.
Без дополнительной таблицы. В таблице сообщений хватит Код, кто, кому, время, что бы выбрать переписку.
не буду знать какое смс пришло раньше
То, у которого код меньше, если у вас точности время не хватает.
Ответ написан
JRK_DV
@JRK_DV
Рецепты https://codepen.io/jrkdv/full/LKLXdq
user = id | ...
message = id | user_id | timestamp | msg | ...

История чата:
SELECT msg FROM message WHERE user_id=uid1 OR user_id=uid2 ORDER BY timestamp;
где uid1\uid2 собеседники
при одинаковом времени, всё равно одна запись будет раньше, другая позже
Ответ написан
@luna3956
Таблица такая: Messages(id, user_from_id, user_to_id, text, msg_time, ...).
Никаких предыдущих номеров Вам запоминать не нужно и никаких записей с одинаковым номером не будет. В таблице Messages поле id делаете автоинкрементным и забываете обо всем, что вас беспокоит.
Как получать историю:
select *
from Messages
where
    user_from_id = $id_пользователя or
    user_to_id = $id_пользователя
order by id
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А зачем нужен номер? Что мешает использовать timestamp?
Ответ написан
Ваш ответ на вопрос

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

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