我不知道用纯文本模拟数据库设计的正确方法,但希望我的示例是可以理解的。下面的工作吗?
方案#1
表:users
字段:user_id
表:stores
字段:store_id
,last_update
表:products
字段:product_id
,last_update
表:subscriptions
字段:user_id
,id
[store_id|product_id],active
表:feed
字段:row_id
, user_id
, id
, notified_date
, viewed_date
,active
模拟几个例子
订阅:
doej, store1, true
doej, product1, true
doej, product2, true
...
当用户取消订阅时
doej, store1, false
喂养:
商店更新时创建提要行,发送通知
1, doej, store1, 2015-01-01, null
当用户视图更新行时
1, doej, store1, 2015-01-01, 2015-01-03
当然,用户对“提要”的看法可能涉及订阅和提要表的连接,并检查订阅活动是否为真
方案#2
方案 #1 的问题似乎是 feed 表会比你想要的大,因为它将是所有订阅用户和所有更新的产物。可以使用日期阈值和查看更新日志的组合,而不是所有可能更新的提要。
表:users
字段:user_id
表:stores
字段:store_id
,last_update
表:products
字段:product_id
,last_update
表:subscriptions
字段:user_id
,,,id
active
表:updates
字段:post_id
,id
[store_id|product_id] date
,,description
表:viewed
字段:post_id
,,,user_id
date
产品更新帖
post1, product1, 2015-12-03, 'new and improved'
用户已订阅
doej, product1, true
如果更新帖子在日期阈值内,并且用户订阅了产品,并且查看的表上没有记录,则为用户显示帖子
用户在日期阈值内(例如 3 个月内)查看帖子,因此更新viewed
表格
post1, doej, 2015-12-07
后续站点访问不会向用户显示帖子,它已经被查看
使用此方案,商店/产品更新只有一条记录,用户“供稿”活动的唯一记录是实际视图。当项目超过日期阈值时,其他所有内容都将退出“提要”视图。
所以我认为我的目标是只记录活动事件:产品更新和用户视图。通知用户更新是被动的——从某种意义上说,用户可能看不到它——所以不要将它记录在提要中。处理具有日期阈值的被动事件。