Database 在数据库中指定用户权限的最有效方法是什么?

Database 在数据库中指定用户权限的最有效方法是什么?,database,database-design,scalability,relational-database,Database,Database Design,Scalability,Relational Database,我有一个应用程序,它以Facebook风格将用户与特定组关联起来 例如: 用户A与组1和组2关联 用户B与组2和组4关联 用户可以为他们所属的每个组创建帖子(少量文本) 我有两种类型的页面:登录用户的主页和每个组的页面。用户主页显示登录用户所属的每个组中的每个其他用户的帖子。“组”页面显示该组中每个用户的所有帖子 我不想在这里复制FaceBook,但我能想到的功能上最接近的相似之处是,来自FaceBook上的朋友的消息如何出现在你的live feed页面以及用户的墙壁(个人资料页面)上 在我的应

我有一个应用程序,它以Facebook风格将用户与特定组关联起来

例如:

用户A与组1和组2关联

用户B与组2和组4关联

用户可以为他们所属的每个组创建帖子(少量文本)

我有两种类型的页面:登录用户的主页和每个组的页面。用户主页显示登录用户所属的每个组中的每个其他用户的帖子。“组”页面显示该组中每个用户的所有帖子

我不想在这里复制FaceBook,但我能想到的功能上最接近的相似之处是,来自FaceBook上的朋友的消息如何出现在你的live feed页面以及用户的墙壁(个人资料页面)上

在我的应用程序中,我有以下三种模型(伪代码):

在数据库可伸缩性和性能方面,将这些数据关联起来的最有效方法是什么?

1) 将每个帖子与用户和组关联。当用户查看组时,从
Post
表中选择所有帖子,其中group ID=当前组。当用户查看自己的主页时,查看该用户所属的组,并查找属于该组的所有其他用户。然后,从这些用户中提取所有帖子

2) 将所有帖子与用户关联。当用户查看自己的主页时,查看该用户所属的组,并查找属于该组的所有其他用户。然后,从这些用户中提取所有帖子。查看组的页面时,查找属于该组的所有用户,然后调出与这些用户关联的所有帖子

3) 创建具有PostID、UserID和GroupID的联接表。查看组时,查找所有具有GroupID的帖子并拉取这些帖子。查看登录用户的主页时,请查找该用户所属的所有组,然后查找属于这些组的所有用户,然后为这些用户调出所有帖子

所有这些解决方案似乎都需要大量额外的工作来为用户的主页提取记录。这些选项似乎都不是最好的解决方案。我肯定有人有这方面的经验。我希望有大量的帖子,所以我希望数据库能够扩展以支持X个记录


有没有更合理的方法?大公司如何做到同样的事情,并尽量减少他们的开销?

您还没有说明您拥有哪些数据库管理系统

对于内置安全(权限)系统的ISO/IEC/ANSI SQL数据库,您不需要这些,只需使用SQL工具设置权限即可。它是内部的,速度非常快

如果您想要性能、可伸缩性和数据完整性,就需要放弃对象和类的概念,学习一些关系数据库的知识。此外,如果您将数据建模为关系数据库(而不是对象类),那么上面90%的问题将不存在

如果你不明白我在说什么,请阅读此文(从12月11日10日标题开始)

有没有更合理的方法?大公司如何做到同样的事情,并尽量减少他们的开销

是的,绝对是。这没有道理。合理的做法是对数据进行适当建模,因为标准化模型总体上要快得多。这导致更多、更小的桌子,而不是更少的胖桌子;算术和物理定律起作用。无数据复制意味着无更新异常,这意味着事务更小,阻塞的可能性更小(您确实希望允许多用户并发访问,对吗?)

此外,您的编码将受到阻碍,因为您无法找出数据与其他数据的关系。在你的问题中加入你的实体(你所有页面的数据内容)(编辑并添加),我们就可以开始了。我可以看到
用户
帖子
,但是
呢;任何其他家具<代码>照片,
相册

在2)解决方案中,没有用户就无法确定帖子所属的组,这在您的业务模式中正确吗?如果用户的归属组发生变化,帖子的归属组也会发生变化。
class User():
    user_name
    first_name
    last_name

class Group():
    group_name

class Post():
    post_content