2

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

您应该能够查看您是否已经阅读了给定的消息,并且获得新响应的消息应该能够位于顶部。

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

4

5 回答 5

1
user
 id
 name

messages
 id
 to_user_id
 from_user_id
 title
 date

message_post
 id
 message_id
 user_id
 message
 date

类将反映这种模式

于 2008-09-23T20:53:39.533 回答
1

您可能希望扩展 Owen 的模式以支持消息仅存储一次的批量消息。还进行了修改,因此只有一个发送者和许多接收者(在此方案中发送者永远不会超过一个)

用户
  ID
  姓名

信息
  ID
  收件人 ID
  content_id
  date_time_sent
  date_time_read
  response_to_message_id(指这封邮件回复的邮件——线程)
  过期
  重要性
  标志(阅读、阅读回复等)

内容
  ID
  message_id
  发件人ID
  标题
  信息

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

-亚当

于 2008-09-23T21:02:15.800 回答
0

这是一个相当简单的表结构。A to/from,主题,然后是消息。现在重要的是日期字段。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
于 2008-09-23T20:55:00.030 回答
0

实际上,我这样做是作为工作中一些内部开发的一部分。制作一个名为 [Messages] 的表并为其指定以下列。

  • mID(消息 ID)
  • from_user
  • to_user
  • 信息
  • 时间
  • tID(线程 ID)
  • 读取(布尔值)

类似的东西应该适用于桌子设计。这些类取决于您设计它的系统。

于 2008-09-23T20:55:11.527 回答
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 表来获取消息线程。

于 2008-09-23T20:55:13.697 回答