MongoDB: система личных сообщений ... как отслеживать отправленные сообщения - PullRequest
0 голосов
/ 27 июня 2010

Если бы вы копировали функцию DM в Твиттере, как бы вы разработали схему для нее? Я могу отправлять и отвечать на сообщения, но моя проблема в том, как я могу отслеживать отправленные сообщения? Если Боб отправит Эми сообщение, Эми увидит сообщение Боба. Боб также имеет копию своего сообщения, расположенную в его «отправленной папке».

Сейчас у каждого сообщения есть «получатель» и «отправитель». Сначала я подумал, что это так, потому что я мог просто запросить информацию о том, кто является отправителем, отображая сообщение на вкладке «Отправленные». Тем не менее, Эми может захотеть удалить сообщение, тогда что? Я не хочу избавляться от сообщения, так как Боб может по-прежнему хотеть его в своем отправленном архиве по любой причине.

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

Ответы [ 3 ]

1 голос
/ 25 января 2012

ОК, уже поздно, но только для поздних читателей: я думаю, что лучше добавить 2 поля к каждому сообщению:

inbox (default = 1)
outbox (default = 1)

когда получатель удаляет свое сообщение, входящие становятся = 0

когда отправитель удаляет свое сообщение, исходящий становится = 0

Если входящие = 0 и исходящие = 0, вы можете удалить сообщение из БД.

Также хорошо добавить поле с именем «new» = 1/0 - оно показывает, прочитал ли получатель сообщение.

0 голосов
/ 28 июня 2010

2 решения, которые я могу придумать:

  1. Сохраните 2 копии сообщения. Это может показаться пустой тратой, но хорошо работает, особенно если вам нужно разделить несколько серверов - все данные пользователей хранятся вместе. (Примечание: так работает электронная почта - очень распределенная модель)

  2. Сохраните одну копию с отправителем / получателем, как вы упомянули, но сделайте вашу функцию удаления «мягкой», то есть. пометить сообщение как удаленное вместо фактического удаления. Это может потребовать 2 флага, если вы хотите, чтобы отправитель и получатель могли удалить сообщение независимо друг от друга.

0 голосов
/ 28 июня 2010

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

На самом деле, это полная противоположность глупости. Сохранение сообщения дважды - это именно то, что ожидается здесь. Денормализация ожидается в этих типах нереляционных баз данных.

И посмотрите на собственное описание.

У Боба также есть копия его сообщения, расположенная в его «отправленной папке».

ОК, так что у Боба "копия" сообщения, вполне разумно, чтобы эта "копия" была другим документом в базе данных.

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