2008-11-17 103 views
2

确定用户是否查看过一段数据的最佳方法是什么,即如何更新评论。这两种方案我也想过是这些....确定用户是否查看过数据的最佳方法

  1. 使用具有一排每个用户所查看的数据ID和插入时,该项目最后看一个单独的表。

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

两种方法解决这个问题,但在溶液中2表的最大行数将在最坏的情况是相同的解决方案1,没有人看到任何东西,最好有0行,一切都已经看到。我知道在解决方案2中,您无法确定它何时被查看。

想法?

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

回答

3

它一定是选项1:

表1(评论)

  • COMMENT_ID
  • 评论

表2(comment_view)

  • COMMENT_ID
  • user_id说明

选项2将无法工作,因为每一个新用户将有充分的现有注释 “标记为已读。”

3

您是否需要知道他们何时或多少次查看了一条数据?

如果不是,我会保留一个FK表的数据更新和FK给用户。然后进行简单的检查,看看他们认为:

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

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

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

2

选项1在这里是更好的方法 - 通常,删除一些东西来表明发生了什么事是在数据库中做事的一种奇怪的方式,正如ng.mangine所指出的,它甚至不会工作(除非你每当有新用户时,向该表添加行,但这几乎肯定会成为瓶颈和性能问题 - 考虑当您有一百万条评论和新用户加入时发生的情况)。

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

1

方案2是做事,一个不寻常的方式这在数据库领域是说它威力工作的一种方式,但它可能是最好的去与像一个选择更传统的方法1.

相关问题