【问题标题】:Database design for internal Messaging (like facebook message)内部消息传递的数据库设计(如 facebook 消息)
【发布时间】:2011-08-25 20:36:56
【问题描述】:

在以下数据库设计中,我如何标记未读消息,以便我们知道发送者和接收者谁阅读了该消息?

(即当人 X 向人 Y 发送消息时,该消息将被标记为人 Y 未读,直到人阅读该消息,但它标记为人 X 已读,因为他发送了该消息)。

留言

  • 标识(PK)
  • 主题
  • 内容
  • MessageTypeId (FK) - 消息、更新(全球广播)、通知等
  • UserId (FK) - 创建者
  • 创建日期
  • 读取日期

MESSAGE_COMMENT

  • 标识(PK)
  • 消息 ID (FK)
  • 内容
  • UserId (FK) - 创建者
  • 创建日期

用户

  • 名字
  • 姓氏
  • 用户名
  • 密码
  • 活跃
  • 等等……等等……

MESSAGE_TYPE

  • 身份证
  • 代码
  • 姓名

编辑:似乎设计不完整。

【问题讨论】:

  • 您可以在设计中添加表格/列,还是仅用这里的内容来解决它?
  • 可以更改现有的或添加额外的表/列。
  • 您可以更新问题并添加UserType 的表结构,UserIdTypedId 参考。
  • 从这两个表中,我看不出如何识别哪些用户收到了消息。在传统的电子邮件系统中,你会需要这个,虽然我没有使用过 Facebook 消息,所以可能不会。尽管模型至少需要支持收件箱概念。一旦你有了它,应该更容易看到你可能希望如何将消息标记为已读。

标签: sql-server database sql-server-2008 database-design relational-database


【解决方案1】:

您可以添加一个链接用户 ID 和消息 ID 的 Read 表。创建消息时,应用程序会自动输入创建者的 UserID 和 MessageID。然后当接收者读取消息时,它会记录 ReceiverID 和 MessageId。

因此,虽然没有 ReceiverID 和 MessageID 的记录,但对于接收者来说,该消息将显示为未读。

【讨论】:

  • 留言评论(回复)呢?
  • 多个收件人怎么办?
  • 上述解决方案适用于多个收件人 - 仍然只有一个发件人,每个收件人都会遵循相同的逻辑,因此实际上无需将其视为不同的问题。
  • 在消息 cmets 方面,我个人认为您可以删除 Message_Comment 表。您可以在 Message 表中添加一个“CommentToMessageId”字段,该字段指定此消息在哪条消息(如果有)上是评论。然后,再次,上述解决方案将涵盖这两种情况。
  • 评论表,很可能被删除。是的。
猜你喜欢
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多