Дизайн базы данных: приватный чат, групповой чат и электронная почта - PullRequest
12 голосов
/ 08 июня 2011

Общение между пользователями 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

Я думаю, что это сработает. Тем не менее, мне интересно, будет ли для пользователя иметь смысл, если я буду отображать все, что пользователь когда-либо сообщал кому-либо в одном долгом разговоре. Это, вероятно, не будет. Представьте себе разговор с человеком А, смешанным с групповым разговором с человеком А, В, С, D, смешанным с разговором с человеком Е и так далее ...

Любое предложение о том, какую концепцию можно было бы использовать?

Ответы [ 2 ]

7 голосов
/ 08 июня 2011

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

Только мое мнение и как я буду это реализовывать.

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

1 голос
/ 02 августа 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...