【问题标题】:Social networking DB schema? [closed]社交网络数据库架构? [关闭]
【发布时间】:2012-02-27 15:48:07
【问题描述】:

用户

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

只有当用户所属的链接属于帖子所属的同一组时,用户才能看到该帖子。

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

感谢您的帮助!

编辑:上述架构是帮助您入门的基本思路。再次感谢!

【问题讨论】:

  • 我不太了解实体link。是不是读作“自时间以来,用户 1 一直是用户 2 的朋友”?如果是这样,为什么链接属于一个组?我将其理解为属于某个组的用户。告诉我你是怎么想的
  • 很抱歉这么久才回复您。这就是我的想法:一个用户有一个组,其中有多个其他用户。我需要存储有关例如的数据当多个用户之一遇到父用户时,这就是我想包含链接对象的原因。该链接由链接中涉及的两个用户所有,因此他们都可以看到他们何时见面以及在哪里见面。同时,如果您再次查看该父用户,您应该能够遍历所有组,遍历这些组中的所有用户(通过链接对象)以获得属于每个的帖子----
  • ----这些多个用户,因此您可以生成帖子的汇总列表。鉴于需要经常执行此帖子查询,因此应尽可能减少资源密集型。

标签: sql database schema social-networking


【解决方案1】:

这就是我将如何建模:

用户(ID 等)

这是用户列表。它仅包含用户数据。 PK 将是id,所以那里会有一个隐式索引

组(ID 等)

这是组列表。它仅包含组数据。 PK 将是id,所以那里会有一个隐式索引

User_Groups(userId、groupId 等)

这是将用户链接到组的方式。它需要具有用户和组的外键,您可以向其中添加任何其他数据,例如用户加入组的日期。这里的PK是userIdgroupId之间的复合键,所以索引是userIdgroupId。您还希望在groupId 中有一个附加索引,因为“主订单”将由userId 给出,而不是由groupId 给出

帖子(id、createdByUserId、belongsToGroupId 等)

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

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

现在,为什么我没有在您的问题中添加link 实体?因为我不知道它是什么,而且你没有回答我在上面询问它是什么的评论。如果它是 2 个用户之间的链接,那么它不应该属于一个组,因为用户分别属于组,而不是成对。除此之外,如果链接是我假设的,那么它根本不会影响用户如何查看他/她自己允许的帖子的性能。 question 可能与 link 实体相关

希望这可以帮助或指导您找到更好的解决方案:)

【讨论】:

    猜你喜欢
    • 2011-05-10
    • 1970-01-01
    • 2011-05-08
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    相关资源
    最近更新 更多