Database design 确定用户是否已查看数据的最佳方法

Database design 确定用户是否已查看数据的最佳方法,database-design,Database Design,确定用户是否查看了一段数据(如评论的更新)的最佳方法是什么。我想到的两个解决方案是 使用一个单独的表,其中每个用户都有一行以及上次查看项目时正在查看和插入的数据id 当项目更改时,使用相同的表为每个用户添加一行,当用户实际查看数据时,删除该行 这两种方法都解决了问题,但在解决方案2中,表的最大行数最坏情况下等于解决方案1,没有人查看任何内容,最多只有0行,所有内容都已查看。我知道在解决方案2中,您无法确定何时查看它 想法 编辑:我以评论的更新为例。在实际应用程序中,新用户不需要查看或读取旧数据。

确定用户是否查看了一段数据(如评论的更新)的最佳方法是什么。我想到的两个解决方案是

  • 使用一个单独的表,其中每个用户都有一行以及上次查看项目时正在查看和插入的数据id

  • 当项目更改时,使用相同的表为每个用户添加一行,当用户实际查看数据时,删除该行

  • 这两种方法都解决了问题,但在解决方案2中,表的最大行数最坏情况下等于解决方案1,没有人查看任何内容,最多只有0行,所有内容都已查看。我知道在解决方案2中,您无法确定何时查看它

    想法


    编辑:我以评论的更新为例。在实际应用程序中,新用户不需要查看或读取旧数据。这对他们来说毫无意义,因为他们刚刚加入

    必须是选项1:

    表1(注释)

    • 注释\u id
    • 评论
    表2(评论视图)

    • 注释\u id
    • 用户id

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

    您需要知道他们何时或多少次查看一段数据吗

    如果没有,我会保留一个表,其中FK用于更新数据,FK用于更新用户。然后进行简单检查,查看他们是否查看:

    select count(*) from DataAlerts where dataid = 1 and userid = 1
    
    更新数据时,插入数据和用户的记录


    当用户查看视图时,删除该用户。

    选项1是这里更好的方法-通常,删除某些内容以表明发生了某些事情是在数据库中执行操作的一种奇怪的方式,如上文所述,它甚至不起作用(除非您在新用户出现时添加到该表中的行,但这几乎肯定是一个瓶颈和PYF问题——考虑当您有一百万条评论和新用户加入时会发生什么)。 选项1更清楚;只有在遇到性能问题时才考虑更改它(或者如果您碰巧提前知道您的流量将需要更优化的策略,例如每个主题上的位向量表示每个系统用户的已读/未读).

    选项2是一种不同寻常的做事方式,在数据库世界中,这是一种表示它可能会起作用的方式,但最好使用更传统的方法,如选项1