设计问题:您将如何设计消息/收件箱系统?

时间:2008-09-23 20:50:39

标签: messaging

许多网站都有从用户向用户发送消息的概念。当您向其他用户发送消息时,该消息将显示在其收件箱中。您可以响应该消息,它将显示为该消息线程中的新条目。

您应该能够看到您是否已经阅读过某条消息,并且获得新回复的消息应该能够位于顶部。

您如何设计类(或表或其他)来支持这样的系统?

5 个答案:

答案 0 :(得分:1)

user
 id
 name

messages
 id
 to_user_id
 from_user_id
 title
 date

message_post
 id
 message_id
 user_id
 message
 date

类将反映这种模式

答案 1 :(得分: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

当然,还有许多其他功能可以添加,但大多数人在想到“电子邮件”时会想到上述功能。

- 亚当

答案 2 :(得分: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

答案 3 :(得分:0)

我实际上这是在工作中进行内部开发的一部分。创建一个名为[Messages]的表,并为其指定以下列。

  • mID(消息ID)
  • FROM_USER
  • to_user
  • 消息
  • 时间
  • tID(线程ID)
  • 读(布尔)

这样的东西应该适用于桌面设计。这些类取决于你正在设计它的系统。

答案 4 :(得分: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

然后,您可以通过Thread表获取消息线程。