繁体   English   中英

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

[英]Database design for a simple social site

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

friends table
user_id
friend_id

每当有人添加朋友时,它都会创建一个条目。 我不确定自己是否朝着正确的方向前进。 另一个问题是,有没有办法检索所有二度学位的朋友?(朋友的朋友)任何帮助将不胜感激。 在此先多谢!

是的,您走的路正确。

您可以通过将friends表连接到自身来检索2度朋友

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的朋友吗?

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

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

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

希望能帮助到你

当然。 那会很好。 您所描述的是一种自我参照的多对多关系。 查询非常简单。 这是$ 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的朋友。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM