3

我们有一组“商店”,每个商店中也列出了“产品”。

作为更新/通知系统的一部分,我们允许用户“关注”商店并“观看”商店中的产品。如果商店发布更新或被修改;或者如果产品更改价格或修改等 - 我们希望通知出现在关注者/观察者的提要中。

我不想在通知表中插入唯一记录,因为其中一些商店/产品可能有大量关注者/观察者。我们正在努力确保这可以正确扩展。

同样,如果用户分别“取消关注”或“取消关注”产品或商店,我们希望这些通知从该用户的该提要中消失。

最后一个理想的方面是它能够在用户看到通知时将其标记为“已查看”或“已读”,因此我们可以在他们的导航栏中放置一个通知气泡。

我的困难实际上是想出支持这一点的架构,而无需在将新事件发布到提要时向数据库表中进行过多的插入。

任何人都可以建议一个简单的数据库模式来支持这种架构吗?

4

1 回答 1

1

我不知道用纯文本模拟数据库设计的正确方法,但希望我的示例是可以理解的。下面的工作吗?

方案#1

表:users 字段:user_id

表:stores 字段:store_idlast_update

表:products 字段:product_idlast_update

表:subscriptions 字段:user_idid[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_idlast_update

表:products 字段:product_idlast_update

表:subscriptions 字段:user_id,,,idactive

表:updates 字段:post_idid[store_id|product_id] date,,description

表:viewed 字段:post_id,,,user_iddate

产品更新帖

post1, product1, 2015-12-03, 'new and improved'

用户已订阅

doej, product1, true

如果更新帖子在日期阈值内,并且用户订阅了产品,并且查看的表上没有记录,则为用户显示帖子

用户在日期阈值内(例如 3 个月内)查看帖子,因此更新viewed表格

post1, doej, 2015-12-07

后续站点访问不会向用户显示帖子,它已经被查看

使用此方案,商店/产品更新只有一条记录,用户“供稿”活动的唯一记录是实际视图。当项目超过日期阈值时,其他所有内容都将退出“提要”视图。

所以我认为我的目标是只记录活动事件:产品更新和用户视图。通知用户更新是被动的——从某种意义上说,用户可能看不到它——所以不要将它记录在提要中。处理具有日期阈值的被动事件。

于 2015-12-16T17:18:21.600 回答