@Uglik

Проектирование базы данных. Переписка между пользователями?

Здравствуйте.

Подскажите как реализовать подобную структуру:

Имеется таблица USERS (пользователи). Нужно реализовать переписку между ними. И выводить переписку с каждым юзером по отдельности.

Например: Пользователь с id_user 5 пишет пользователю с id_user 10, user 10 отвечает user 5. Пользователь с user_id 20 пишет пользователю с user_id 5 и тд

Как я понимаю мы создаем таблицу Messages (id, message, datetime, is_read) и таблицу связи между users и messages.

Не могу понять как индифицировать каждую переписку.
  • Вопрос задан
  • 547 просмотров
Пригласить эксперта
Ответы на вопрос 2
sim3x
@sim3x
id, id_user_from, id_user_to, message, datetime, is_read
Ответ написан
@fynivx
Software Engineer ( .NET )
Нет, вспомогательная таблица тут не нужна.

Если нужно, чтобы между юзерами могло проходить несколько разных переписок, стоит создать таблицу Conversations (id, initiator_id, date_started, etc ... ) - не для связи, а как самостоятельную сущность, а в таблицу Messages добавить три референса - sender_id, receiver_id и conversation_id.

Но если допускается, что сообщения между двумя юзерами - всегда одна переписка, то достаточно просто в Messages добавить sender_id и receiver_id. Это однозначно свяжет каждое сообщение с двумя юзерами.

А вот если нужна переписка сразу между несколькими юзерами, тогда уже нужна вспомогательная таблица ConversationMembers (user_id, conversation_id), а из Messages нужно убрать receiver_id - сообщение и так будет связано с перепиской, и все ConversationMember'ы смогут его получить.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы