设计问题:我们将如何设计消息传递/收件箱系统?

时间:2020-03-06 14:37:35  来源:igfitidea点击:

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

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

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

解决方案

user
 id
 name

messages
 id
 to_user_id
 from_user_id
 title
 date

message_post
 id
 message_id
 user_id
 message
 date

类将反映这种模式

这是一个相当简单的表结构。到/来自主题,然后是消息。现在重要的是日期字段。 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

我实际上是在做一些内部开发工作的一部分。创建一个名为[Messages]的表,并为其提供以下各列。

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

诸如此类的东西应该适用于表格设计。这些类取决于我们要在其上设计的系统。

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表以获取消息线程。

我们可能需要扩展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

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

-亚当