设计一个简单的关系型数据库table 存储用户好友信息

Design a simple relational database table to store friends of user information

我有一个简单的用户 table say with columns

user_id PK
Name

还有一个朋友 table 有专栏

user_id FK
friend_id FK

现在说朋友table店

Table Friends
---------------
user_id friend_id
----------------
1      2
1      3
2      3

好友关系为<-> 现在要检索用户 1 的朋友列表,我可以这样做

SELECT friend_id FROM friends where user_id = 1;

但是由于它是双向关系,我如何检索用户 3 的朋友列表,即使它在 user_id 朋友 table 列中的任何地方都没有通过查询提及用户 3 ?我是否必须在朋友 table 中进行冗余存储,如 (3,1)、(3,2)? 或者谁能​​提出更好的方案?

如果 user1user2 的朋友,那么 user2 是 [=] 的朋友17=]用户 1.

如果您没有像关注者这样的额外角色,那么在这种情况下同时存储 (1,2) 和 (2,1) 是多余的,您可以只存储上述对中的一对,并使用joinunion:

select u.user_id user, f1.friend_id friend
from users u
join friends f1 on u.user_id=f1.user_id
union
select u.user_id user, f2.user_id friend
from users u
join friends f2 on u.user_id=f2.friend_id