gpt4 book ai didi

mysql - 数据库选择: frequently querying 2nd degree connections

转载 作者:行者123 更新时间:2023-11-29 20:48:18 26 4
gpt4 key购买 nike

我的网络应用程序需要始终查询二级连接。假设每个用户有 200 个 friend ,这些 friend 每个都有 200 个 friend 。我可以使用一些帮助来确定正确的数据库(和表结构),以使这个 Web 应用程序快速且响应灵敏。

业务逻辑:用户搜索其一级和二级关系,以获取使用特定服务的其他用户的列表(以unsigned int形式存储在一列中)。这是此应用程序的唯一功能。

表结构:

  • 用户表:User_ID (pk)、Facebook_ID (sk)、姓名、特定服务、位置
  • 关系表:尚未确定。

问题:我阅读了很多帖子并在网上搜索了“社交网络数据库设计”。然而,这些应用程序感觉与我的有很大不同。我将拥有许多用户(超过 1000 万),但只有一个小型数据库,并且仅运行业务逻辑中描述的一个查询。

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

最佳答案

您需要一个包含两个 id 的表;它将定义一个“ friend ”。这种关系是对称的吗?也就是说,如果A是B的 friend ,那么B是A的 friend 吗?好吧,当两者都发生时,我假设有 2 行。

然后

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 = ?

关于mysql - 数据库选择: frequently querying 2nd degree connections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38265259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com