设计问题:我们将如何设计消息传递/收件箱系统?
时间: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
当然,可以添加许多其他功能,但是大多数人在想到"电子邮件"时会想到上述功能。
-亚当