关注/取消关注组或列表的数据库架构

时间:2012-05-08 02:01:50

标签: mysql database data-structures structure

我想要创建的是一个关注者/关注系统,而不是简单地关注用户,而是关注他们共享的内容部分。几乎就像你在关注Twitter"列表"或团体而不是人。但是,通过这种方式,您可以关注/取消关注用户共享的所有内容,或者只关注/取消关注您想要的列表。

Ex#1:我点击了"关注所有"按钮以关注用户#1&#39> 列表,但取消关注有关政治的列表。现在我跟踪他们共享的所有内容,除了一个列表。我是他们的追随者。

Ex#2:我只关注用户#2&#39> 列表中的一个,而不是点击"关注所有"按钮。我只应该看到一个列表而不是所有列表。

简单的跟随/跟随系统的结构可能是具有user_id => follower_id模式的表,但是不会考虑由用户创建的新列表。

问题:哪种数据库架构最适合这种情况?

1 个答案:

答案 0 :(得分:2)

为了简化它并帮助它扩展,我认为它是list_id => follower_id与辅助表的映射,辅助表是user_id => follower_id的映射

帮助程序表唯一能让您知道的是,如果用户创建了一个新列表,它会告诉您需要创建的list_id => follower_id映射。它基本上只是作为追随者的设置。 (例如:自动关注X用户的新列表)

当您向关注者显示Feed时,您只能访问包含地图list_id => follower_id的表格。您甚至不需要查找user_id => follower_id映射。只有在创建新列表时才会播放。

这里最大的问题是你必须处理跟随者第一次说“全部跟随”/“跟随用户”的情况。在这种情况下,您可以根据该用户已存在的列表回填所有list_id => follower_id映射。 (我相信这与Twitter处理他们的以下模型的方式类似。如果我开始关注某人,它会回填他们的推文的X号码,如果我取消关注它会删除他们最近推特的X号数字)

然后,如果用户想要排除列表,则只需删除该特定列表的映射到该关注者。在这种情况下,您可以保留user_id => follower_id的映射,因为我假设您希望用户创建的任何新列表都显示给关注者。