Общение между пользователями 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 и так далее ....
Есть какие-нибудь предложения о том, какую концепцию можно использовать?