我的网络应用程序需要始终查询第二级连接。每个用户都说200个朋友&那些朋友各有200个朋友。我可以使用一些帮助来确定正确的数据库(和表格结构),以使这个网络应用程序快速和响应。
商业逻辑:用户搜索他们的第一个&第二级连接,以获取使用特定服务的其他用户的列表(作为 unsigned int 存储在一列中)。这是该应用程序的唯一功能。
表格结构:
问题:我看了很多帖子&在网上搜索“社交网络数据库设计”。但是,这些应用程序感觉与我的不同。我将拥有许多用户(+ 10密耳),但是一个小型数据库&如业务逻辑中所述,只运行一个查询。
其他信息:用户只能使用自己的Facebook帐户注册(并随后登录)。他们的朋友将被邀请(通过Facebook)也注册。一旦朋友注册(仅活跃/未阻止/未挂起的朋友),将填充关系表。因此,我可以从关系表中删除“友谊状态”列。
答案 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 = ?