0

我目前正在设计一个简单的社交网站的数据库。我为我的数据库使用MySQL。目前,我只有一个用户表。基本上,我希望用户能够添加朋友并能够列出他们的朋友。我想创建一个朋友表,类似的:一个简单的社交网站的数据库设计

friends table 
user_id 
friend_id 

每当有人添加了一个朋友,它会创建一个条目。我不确定我是否在正确的方向。另一个问题是,有没有办法找回所有二级朋友?(朋友的朋友)任何帮助,将不胜感激。提前感谢!

+0

创建包含所有用户信息并具有PK作为user_id的表,将frind_id作为FK用于朋友表user_id – solaimuruganv

回答

3

是的,你走在正确的道路上。

您可以通过加入好友表本身

select t2.friend_id 
from friends t1 
    inner join friends t2 on t1.friend_id = t2.user_id 
where t1.user_id = ... 

有一点要考虑检索二度朋友是交换性 - 如果A是B的一个朋友,就是B A的朋友吗?

1

用所有用户属性创建一个用户表,然后用另一个表来存储用户之间的关系。

关系表将包含两列,每列都保存一个user_id,并在此表中存储两个用户之间的友谊。 (否则,你将只能有一个朋友每个用户)。

为了获得不同级别的关系,您需要在两个表之间进行连接。 (根据你使用的RDMBS,你可能有一些捷径)。

希望它有帮助

0

我有一个存储友谊的连接表。有一列存储请求友谊的用户的ID,存储请求被发送到的用户的ID的列,存储友谊是否被接受的布尔列以及用于存储请求已发送。

1

当然。这将工作正常。你所描述的是一种自我引用的多对多关系。查询非常简单。这里是$ current_user的所有朋友:

select u.* from users as u 
    inner join friends as f on u.id = f.friend_id 
    where f.user_id = $current_user_id 

关于要考虑的事情是,这在技术上是一个有向图。因此,用户A可以与用户B成为朋友,但用户B不一定与用户A成为朋友。

+0

谢谢!这帮了很多。 – maru