2008-09-23 2 views
2

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

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

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

+0

Это слишком расплывчато. Вы соберете десятки действительных ответов, каждый из которых требует отдельного обсуждения своих плюсов и минусов. Это интересный вопрос, но StackOverflow не создан для такого обсуждения. – 2008-09-23 20:55:27

ответ

1
user 
id 
name 

messages 
id 
to_user_id 
from_user_id 
title 
date 

message_post 
id 
message_id 
user_id 
message 
date 

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

0

Это довольно простая структура таблицы. A в/из, тему, а затем сообщение. Теперь важны поля даты. 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 
0

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

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

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

0
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 

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

1

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

 
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 

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

Адам

Смежные вопросы