【发布时间】:2023-04-10 13:12:01
【问题描述】:
我有一个应用程序,它以 Facebook 风格的方式将用户与特定群组相关联。
例如:
用户 A 与组 1 和组 2 相关联
用户 B 与第 2 组和第 4 组相关联
用户可以为他们所属的每个组创建帖子(少量文本)。
我有两种类型的页面:登录用户的主页和每个组的页面。用户的主页显示来自登录用户所属的每个组中的每个其他用户的帖子。群组页面显示来自该群组中的每个用户的所有帖子。
我不想在这里复制 Facebook,但我能想到的最接近的功能是来自 Facebook 上的一位朋友的消息如何显示在您的实时提要页面以及用户的墙上(个人资料页)。
在我的应用程序中,我有这三个模型(伪代码):
class User():
user_name
first_name
last_name
class Group():
group_name
class Post():
post_content
就数据库可扩展性和性能而言,关联这些数据的最有效方法是什么?
1) 将每个帖子与用户和组相关联。当用户查看组时,从Post 表中选择所有帖子,其中组 ID = 当前组。当用户查看自己的主页时,查看该用户所属的组并查找属于该组的所有其他用户。然后,拉取这些用户的所有帖子。
2) 将所有帖子与用户关联。当用户查看自己的主页时,查看该用户所属的组并查找属于该组的所有其他用户。然后,从这些用户那里提取所有帖子。查看群组页面时,查找属于该群组的所有用户,然后拉取与这些用户关联的所有帖子。
3) 创建一个包含 PostID、UserID 和 GroupID 的连接表。查看组时,找到所有具有 GroupID 的帖子并拉出这些帖子。查看登录用户的主页时,找到该用户所属的所有组,然后找到属于这些组的所有用户,然后拉取这些用户的所有帖子。
所有这些解决方案似乎都需要大量额外的工作来为用户的主页提取记录。这些选项似乎都不是最好的解决方案。我敢肯定有人有这方面的经验。我希望有大量的帖子,所以我希望数据库可以扩展以支持 X 条记录。
有没有更有意义的方法来做到这一点?大公司如何设法做同样的事情并尽量减少开销?
【问题讨论】:
-
在2)解决方案中,帖子所属的组,没有用户无法确定,在您的业务模型中是否正确?如果用户所属群组发生变化,帖子所属群组也会发生变化。
标签: database database-design scalability relational-database