我必须为朋友网络进行数据库设计。 当我将某人添加为某人朋友时,我实际上将他们的uniqueID添加到包含两列的表中。
| USER 1 | USER 2 |
所以,当我想知道什么是朋友时,我在这张桌子上做一个寻找ID的选择。
但问题是,当我想要显示朋友列表时,我必须搜索他的所有朋友,并在查找每个ID以查找详细信息之后。 它看起来不对。
有更有效的方法吗?我可以设计我的数据库吗? 我们有什么地方可以了解有关数据库设计的更多信息吗?
答案 0 :(得分:1)
你的设计对我来说似乎很好。然而,查看JOINs将帮助您摆脱嵌套查询以获取用户的信息。 JOIN将允许您在一个查询中获取有关两个用户的所有信息,然后您可以循环并打印列表。
查询可能会变成:
SELECT
u.name
FROM
friends f
JOIN users s ON (u.id = f.user_id_2)
WHERE
f.user_id_2 = 1234
答案 1 :(得分:1)
考虑到你上面所说的话,我认为你走的正确。多对多关联表是您所描述内容的规范方式。听起来问题可能在您的查询中 - 您说您必须进行多次查找。你应该可以写这样的东西
SELECT * FROM People p1
INNER JOIN Friends f on p1.id = f.id1 and p2.id = f.id2
INNER JOIN People p2 on p2.id = f.id2
WHERE p1.id = 6123