Подтвердить что ты не робот

Дизайн базы данных: частный чат, групповой чат и электронные письма

Связь между пользователями Facebook, похоже, хранится в одном длинном "разговоре". Таким образом, отправленные сообщения электронной почты и личные сообщения чата, обмен которыми все, похоже, являются частью одного продолжительного разговора.

Я думаю, что эта реализация хорошо работает для пользователей (по крайней мере, для меня). Я предполагаю, что дизайн таблицы для этой части может быть реализован следующим образом:

TABLE: message
 - message_id
 - timestamp
 - from_user_id
 - to_user_id
 - message

Что делать, если я хочу поддерживать групповой чат? Я сделал бы что-то вроде этого:

TABLE: message
 - message_id
 - timestamp
 - from_user_id
 - message

TABLE: message_recipient

 - message_recipient_id
 - message_id
 - to_user_id

Я думаю, это сработает. Тем не менее, мне интересно, если бы это имело смысл для пользователя, если бы я отображал все, что пользователь когда-либо сообщал кому-либо в один длинный разговор. Это, вероятно, не будет. Представьте себе разговор с Лицом A, смешанным с групповым разговором с Лицом A, B, C, D, смешанным с разговором с Лицом E и т.д....

Любое предложение о том, что можно использовать для использования?

4b9b3361

Ответ 1

Я считаю, что сообщение должно быть сущностью, независимо от платформы или отправителя/получателя, с полями id, message, timestamp, а таблица отношений сообщений - как вы сказали - с id, message_id from_id, to_id. Затем, если вы показываете единичный пользовательский разговор, вы можете показывать каждое сообщение между ними. Для групповых чатов вы должны иметь таблицу с id, title, timestamp, которая содержит основную запись группового чата, а другая таблица содержит пользователей, которые являются частью этого группового чата, с id, group_chat_id, user_id.

Просто мое мнение и как я его реализую.

Изменить: Возможно, имеет смысл иметь from_id для самого объекта сообщения, так как сообщение должно иметь уникальный идентификатор отправителя.

Ответ 2

Вы также можете группировать сообщения по темам. Вы добавляете таблицу тем. Вы добавляете таблицу получателей, привязанную к теме. Сообщения также будут привязаны к теме.

Вы можете программным образом ограничить темы между двумя пользователями, посмотрев, в какой теме эти два пользователя у получателей. Вы также можете отделить свои сообщения, указав им атрибут типа. Например, тип 0 будет сообщением "Входящие", тип 1 будет сообщением чата и т.д.

Если бы я хотел иметь произвольное количество получателей в одном из тем, я бы избежал компиляции from_id/to_id.