社交网络DB架构?

社交网络DB架构?

问题描述:

用户社交网络DB架构?

    • 链接
      • 用户1
      • 用户2
      • 时间(或其他一些相关的链接数据)
    • 帖子

如果用户属于属于该帖子所属的同一组的链接,则用户只能看到帖子。

我想优化数据库以查询给定用户被允许查看的所有帖子。构建数据库来执行此操作的最佳方法是什么?

感谢您的帮助!

编辑:上面的模式是一个基本的想法,让你开始。再次感谢!

+0

我不完全得到实体'link'。那是因为“User1自从Time以来一直是User2的朋友”吗?如果是这样的话,为什么链接属于一个组?我将它理解为属于一个组的用户。让我知道你是如何看待这个 – 2012-02-06 05:00:39

+0

对不起,花了这么长时间才能回到你身边。以下是我的想法:用户有一个其他多个用户的组。我需要存储关于例如当多个用户中的一个遇到父用户时,这就是为什么我想包含链接对象的原因。该链接由参与该链接的两个用户拥有,因此他们都可以看到他们什么时候见面以及在哪里见面。同时,如果您再次查看该父级用户,则应该能够遍历所有组,并通过这些组中的所有用户(通过链接对象)获取属于每个用户的帖子---- – Andrew 2012-05-20 18:57:10

+0

----这些多个用户,因此您可以生成帖子的聚合列表。考虑到它需要经常进行,这个帖子查询应该尽可能地少用资源。 – Andrew 2012-05-20 18:59:38

这是我怎么会对此建模:

用户(身份证等)

这是用户列表。它只包含用户数据。在PK将是id,所以会出现有一个隐含的指数

组(身份证等)

这组列表中。它只包含组数据。在PK将是id,这样就会有一个隐含的指数有

User_Groups(用户ID,的groupId等)

这是用户链接到组的方式。它需要拥有用户和组的外键,并且您可以添加任何其他数据,例如用户加入组的日期。此处的PK将是userIdgroupId之间的复合关键字,因此索引将为userIdgroupId。你也想拥有在groupId附加指标,因为“主令”将被userId给予,而不是由groupId

帖子(ID,createdByUserId,belongsToGroupId等)

这是帖子列表。帖子仅由用户创建,只属于一个组。要显示一篇文章,您将加入用户表的createdByUserId(显示创建该文章的用户的名称)。此外,您还需要检查是否允许用户查看帖子。因此,您将转到User_Groups表并使用类似于$currentUserId = users_groups.userId and $currentPostBelongsToGroupId = users_groups.groupIdWHERE子句(或者您可以加入post.belongsToGroupId = user_groups.groupId的表)。

这是一般的想法。现在,要专注于“优化数据库以查询允许给定用户看到的所有帖子”,您应该基本上按照我在“帖子”实体描述中所述的内容进行操作。由于您不想查找特定的帖子,因此您必须使用User_Groups加入帖子(此加入将使用在User_Groups实体上创建的groupId索引),然后使用在此指出的WHERE子句。该子句将使用在该实体上创建的复合主键。就是这样。它似乎是一个完全索引的路径。

现在,为什么我没有添加link实体?因为我不知道它是什么,你没有回答我的评论,询问它是什么。如果它是2个用户之间的链接,则它不应该属于一个组,因为用户分别属于组,而不是成对。除此之外,如果链接是我所设想的,那么就不会影响用户看到他/她自己允许的帖子的表现。可能与questionlink实体

希望这有助于或引导你到一个更好的解决办法:)