数据库选择:经常查询二度连接

时间:2016-07-08 11:12:08

标签: mysql facebook-graph-api database-schema social-networking database-performance

我的网络应用程序需要始终查询第二级连接。每个用户都说200个朋友&那些朋友各有200个朋友。我可以使用一些帮助来确定正确的数据库(和表格结构),以使这个网络应用程序快速和响应。

商业逻辑:用户搜索他们的第一个&第二级连接,以获取使用特定服务的其他用户的列表(作为 unsigned int 存储在一列中)。这是该应用程序的唯一功能。

表格结构

  • 用户表:User_ID(pk),Facebook_ID(sk),名称,特定服务,位置
  • 关系表:尚未决定。

问题:我看了很多帖子&在网上搜索“社交网络数据库设计”。但是,这些应用程序感觉与我的不同。我将拥有许多用户(+ 10密耳),但是一个小型数据库&如业务逻辑中所述,只运行一个查询。

其他信息:用户只能使用自己的Facebook帐户注册(并随后登录)。他们的朋友将被邀请(通过Facebook)也注册。一旦朋友注册(仅活跃/未阻止/未挂起的朋友),将填充关系表。因此,我可以从关系表中删除“友谊状态”列。

1 个答案:

答案 0 :(得分:0)

你需要一个有两个id的表;它将定义一个'朋友'。这种关系是否对称?也就是说,如果A是B的朋友,B是A的朋友吗?好吧,我假设两者都出现了两行。

然后

CREATE TABLE Friends (
    user1 ...,
    user2 ...,
    PRIMARY KEY(user1, user2),
    INDEX(      user2, user1)
) ENGINE=InnoDB;

SELECT a.name, c.name
    FROM Users AS a
    JOIN Friends AS ab  ON ab.user1 = a.user_id
    JOIN Users AS b  ON b.user_id = ab.user2
    JOIN Friends AS bc  ON bc.user1 = b.user_id
    JOIN Users AS c  ON c.user_id = bc.user2
    WHERE a.user_id = ?