确定用户是否查看过数据的最佳方法

时间:2008-11-17 21:42:35

标签: database-design

确定用户是否查看了一段数据的最佳方法是什么,即评论的更新。我想到的两个解决方案就是这些....

  1. 使用一个单独的表格,每个用户都有一行,以及上次查看该项目时正在查看和插入的数据ID。

  2. 使用相同的表格,并在项目更改时为每个用户添加一行,并在用户实际查看数据时删除该行。

  3. 两种方法都解决了这个问题,但在解决方案2中,表的最大行最差等于解决方案1,没有人查看任何内容,最多只有0行,所有内容都已被查看。我知道在解决方案2中你无法确定它何时被查看。

    思考?

    编辑:我使用评论更新作为示例。在实际应用中,不希望新用户查看或读取旧数据。他们刚加入对他们没有任何意义。

4 个答案:

答案 0 :(得分:3)

必须是选项1:

表1(评论)

  • COMMENT_ID
  • 评论

表2(comment_view)

  • COMMENT_ID
  • USER_ID

选项2不起作用,因为每个用户都会将所有现有评论“标记为已读”。

答案 1 :(得分:3)

你需要知道他们查看一段数据的时间或次数吗?

如果不是,我会将带有FK的表保存到数据更新,并将FK保留给用户。然后进行简单的检查,看看他们是否看过:

select count(*) from DataAlerts where dataid = 1 and userid = 1

更新数据时插入数据和用户的记录。

当用户查看删除该用户时。

答案 2 :(得分:2)

选项1是更好的方法 - 通常,删除某些内容以表明发生了某些事情是在数据库中执行操作的一种奇怪的方式,并且如上所述的ng.mangine,它甚至不起作用(除非您添加每次有新用户时都会向该表行,但这几乎肯定是一个瓶颈和性能问题 - 考虑当你有一百万条评论和一个新用户加入时会发生什么。

选项1更清晰;如果您遇到性能问题(或者您事先知道您的流量需要更优化的策略,例如每个主题上的位向量代表每个系统用户的读/未读),请考虑更改它。

答案 3 :(得分:1)

选项2是一种不寻常的做事方式,在数据库世界中这是一种说法可能工作的方式,但最好是采用更传统的做法方法如选项1。