我们有一组'商店',每个商店都列有'产品'。
作为更新/通知系统的一部分,我们允许用户在商店中“关注”商店和“观看”产品。如果商店发布更新或被修改;或者,如果产品更改价格或被修改等,我们希望通知显示在关注者/观察者的供稿中。
我不想在通知表中插入唯一记录,因为其中一些商店/产品可能有大量的粉丝/观察者。我们正在努力确保正确缩放。
同样,如果用户分别“取消”或“取消关注”产品或商店,我们希望这些通知从该用户的该Feed中消失。
最后一个可取的方面是,当用户看到通知时,它能够将通知标记为“已查看”或“阅读”,因此我们可以在其导航栏中添加通知气泡。
我的难点在于提供支持此功能的架构,而不需要在将新事件发布到Feed时过度插入数据库表。
有人可以建议我可以用来支持这种架构的简单数据库架构吗?
答案 0 :(得分:1)
我不知道用纯文本模拟数据库设计的正确方法,但希望我的例子是可以理解的。以下是否有效?
计划#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
饲料:
在商店更新时创建Feed行,发送通知
1, doej, store1, 2015-01-01, null
当用户视图更新行
时1, doej, store1, 2015-01-01, 2015-01-03
当然,用户对“Feed”的看法可能会涉及订阅和Feed表的连接以及订阅有效的检查
计划#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
后续网站访问不向用户显示帖子,已经查看了
使用此方案,商店/产品更新只会有一条记录,而用户“Feed”活动的唯一记录是实际视图。当项目早于日期阈值时,其他所有内容都将从“Feed”视图滚动。
所以我认为我的目标只是记录活动事件:产品更新和用户视图。通知用户更新是被动的 - 在某种意义上用户可能无法查看 - 因此不要将其记录在Feed中。使用日期阈值处理被动事件。