【问题标题】:SQL - enhance schema to count unread messagesSQL - 增强模式以计算未读消息
【发布时间】:2012-03-30 01:01:13
【问题描述】:

我有一个简单的消息模式,其中“线程”将 2 个或更多用户与消息流联系起来。每条消息都属于一个线程。它就像 SMS 消息或 Facebook 消息一样工作。

我只需要计算给定用户有多少线程有新消息。当用户打开一个线程时,我需要更新数据库(仅限该用户),表明他们已经查看了该线程。鉴于这 2 个表,我应该如何增强我的架构来为每个线程中的每个用户存储这个“更新的线程”数据?

消息线程:
线程ID
最后更新

MessageThreadUsers:
线程FK
用户FK

我正在考虑添加此表(但有更好的方法吗???)

用户线程
用户FK
线程FK
最后检查

【问题讨论】:

  • 既然UserThreadsMessageThreadUsers 具有相同的键,为什么不将新的lastChecked 列添加到MessageThreadUsers 表中?

标签: sql schema messaging


【解决方案1】:

您应该能够在 MessageThreadUsers 表中添加一个 lastChecked 列。然后您可以将该值与 MessageThreads 中的 lastUpdated 字段进行比较,以确定用户是否有新消息。或者像下面这样的东西应该会给你新消息的总数。

SELECT COUNT(mtu.*) FROM MessageThreadUsers mtu JOIN MessageThreads mt ON mt.threadID = mtu.threadFK WHERE mtu.lastChecked < mt.lastUpdated GROUP BY mtu.userFK

【讨论】:

  • 很好...我会试试看。好像太合乎逻辑了!!! :) 我不知道为什么我认为我需要另一张桌子!
【解决方案2】:

MessageThreads 中的某种 unread 布尔值怎么样?更新线程时,unread 设置为 true。当用户检查线程时,将其设置为false

只是一个想法。

【讨论】:

  • 多个用户可以属于同一个线程,因此未读标志需要应用于用户/线程组合,而不仅仅是一个线程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 2018-08-28
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多