0

我试图避免客户端cookie,因为不同的浏览器会再次显示我的应用程序中的页面。

用户只需要在第一次看到它时才能看到它。然后我在这样的表中思考:

表:用户 x pages_that_viewed

user_id      seen_page         seen_profile        seen_another_page...

  12         2012-12-12 

  13         2012-12-12         2012-12-12  

然后我每次都必须将表用户加入这个用户......

然后另一个解决方案是将这些列直接添加到用户表中。

4

3 回答 3

2

根据您拥有的页面数量和计划添加的页面数量,每个附加页面都需要修改数据库架构。一般来说,这不是一个好主意。您可以改为为每个用户每页创建一条记录。user_id、page_id 上的索引。如果您想知道他们何时访问它,第三个字段将是日期,否则将使用布尔值。另一种选择是使用位图,但如果您需要日期,这将不起作用,但是每页只需要 1 条记录来跟踪所有用户访问。

位图字段将存储类似 001000100011110010 的内容,其中每个数字代表一个 user_id 并存储对该页面的访问。前任。user_id 12,将是第 12 位 0 或 1 等。在访问时,您将更新 1 个字段并将第 N 位设置为 1。位图通常非常快并支持一些额外的操作,如联合、交叉等。

于 2012-09-18T16:03:19.163 回答
2

我认为列会更具成本效益,更少的查询......

尝试一个布尔游览列,然后当有人登录到您的应用程序时,只需获取该列并将其存储在会话中

session[:tour] ||= @user.tour
于 2012-09-18T16:04:21.113 回答
0

在阅读了您的最后一条评论后,我提出了这个想法,我认为您应该在用户和页面之间建立一个多对多关联的关系,然后您可以有一个联结表 pages_users,其中包含 user_id 和 page_id 列,然后在每次渲染时检查当前用户是否有当前页面。我认为这是最好的方法。

于 2012-09-18T16:52:25.957 回答