Вопрос дизайна: Как бы вы спроектировали систему обмена сообщениями / входящие? - PullRequest
2 голосов
/ 24 сентября 2008

Многие веб-сайты имеют концепцию отправки сообщений от пользователя к пользователю. Когда вы отправляете сообщение другому пользователю, оно появляется в папке «Входящие». Вы можете ответить на сообщение, и оно будет отображаться как новая запись в этой ветке сообщений.

Вы должны увидеть, прочитали ли вы уже данное сообщение, а сообщения, получившие новый ответ, должны быть наверху.

Как бы вы разработали классы (или таблицы, или что-то еще) для поддержки такой системы?

Ответы [ 5 ]

1 голос
/ 24 сентября 2008

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

user
  id
  name

message
  id
  recipient_id
  content_id 
  date_time_sent
  date_time_read
  response_to_message_id (refers to the email this one is in response to - threading)
  expires
  importance
  flags (read, read reply, etc)

content
  id
  message_id
  sender_id 
  title
  message

Конечно, есть много, много других функций, которые можно добавить, но большинство людей думают о вышеупомянутых функциях, когда думают "электронная почта".

-Adam

1 голос
/ 24 сентября 2008
user
 id
 name

messages
 id
 to_user_id
 from_user_id
 title
 date

message_post
 id
 message_id
 user_id
 message
 date

классы будут отражать такую ​​схему

0 голосов
/ 24 сентября 2008
Table Message:
id INTEGER
recipient_id INTEGER -- FK to users table
sender_id INTEGER -- ditto
subject VARCHAR
body TEXT

Table Thread
parent_id -- FK to message table
child_id -- FK to message table

Затем вы можете просто просмотреть таблицу потоков, чтобы получить поток сообщений.

0 голосов
/ 24 сентября 2008

Я на самом деле делаю это как часть внутреннего развития на работе. Создайте таблицу с именем [Messages] и укажите в ней следующие столбцы.

  • mID (идентификатор сообщения)
  • from_user
  • to_user
  • сообщение
  • время
  • TID (идентификатор потока)
  • читать (логическое)

Нечто подобное должно работать для дизайна стола. Классы зависят от того, на какой системе вы их разрабатываете.

0 голосов
/ 24 сентября 2008

Это довольно простая структура таблицы. А в / из, тема, а затем сообщение. Теперь важны поля даты. DateSent сообщает, когда оно было отправлено, DateRead сообщает, что сообщение было прочитано, а DateDeletedTo сообщает, что пользователь TO удалил его, а DateDeletedFROM сообщает, что пользователь FROM его удалил (это логические удаления для этого примера).

tblMessage
ID  BIGINT 
ToUserID GUID/BIGINT
FromUserID GUID/BIGINT
Subject NVARCHAR(150)
Message NVARCHAR(Max)
DateDeletedFrom DATETIME
DateDeletedTo DATETIME
DateSent DATETIME
DateRead DATETIME
...