许多网站都有从用户到用户发送消息的概念。当您向其他用户发送消息时,该消息将显示在他们的收件箱中。您可以回复该消息,它会在该消息线程中显示为一个新条目。
您应该能够查看您是否已经阅读了给定的消息,并且获得新响应的消息应该能够位于顶部。
您将如何设计类(或表或其他)来支持这样的系统?
许多网站都有从用户到用户发送消息的概念。当您向其他用户发送消息时,该消息将显示在他们的收件箱中。您可以回复该消息,它会在该消息线程中显示为一个新条目。
您应该能够查看您是否已经阅读了给定的消息,并且获得新响应的消息应该能够位于顶部。
您将如何设计类(或表或其他)来支持这样的系统?
user
id
name
messages
id
to_user_id
from_user_id
title
date
message_post
id
message_id
user_id
message
date
类将反映这种模式
您可能希望扩展 Owen 的模式以支持消息仅存储一次的批量消息。还进行了修改,因此只有一个发送者和许多接收者(在此方案中发送者永远不会超过一个)
用户 ID 姓名 信息 ID 收件人 ID content_id date_time_sent date_time_read response_to_message_id(指这封邮件回复的邮件——线程) 过期 重要性 标志(阅读、阅读回复等) 内容 ID message_id 发件人ID 标题 信息
当然,还有很多很多其他功能可以添加,但是大多数人在想到“电子邮件”时会想到上述功能。
-亚当
这是一个相当简单的表结构。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
实际上,我这样做是作为工作中一些内部开发的一部分。制作一个名为 [Messages] 的表并为其指定以下列。
类似的东西应该适用于桌子设计。这些类取决于您设计它的系统。
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 表来获取消息线程。