简单社交网站的数据库设计

时间:2012-10-18 13:03:55

标签: mysql ruby-on-rails database database-design social-networking

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

friends table
user_id
friend_id

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

4 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

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

希望有所帮助

答案 2 :(得分: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的朋友。

答案 3 :(得分:0)

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

相关问题