一尘不染

友谊数据库模式

mysql

我正在创建一个涉及可以成为朋友的用户的数据库模式,我想知道建模这些朋友建立友谊能力的最佳方法是什么。难道是它自己的表仅具有两列,每个列代表一个用户?谢谢!


阅读 303

收藏
2020-05-17

共1个答案

一尘不染

create table 
friendship(
user bigint, 
friend bigint,
primary key(user, friend),
key(friend, user),
constraint `fk_user` foreign key (user) references user(id),
constraint `fk_friend` foreign key (friend) references user(id)
);

当用户1向用户2发送友谊请求时,

insert into friendship (user, friend) values (1,2);

如果用户2拒绝该请求,

delete from friendship where user = 1 and friend = 2;

如果用户2接受:

insert into friendship (user, friend) values (2,1);

然后,可以通过这种方式找到友谊:

select f1.* 
from friendship f1
inner join friendship f2 on f1.user = f2.friend and f1.friend = f2.user;

您可以使用最后一个查询进行查看,这将帮助您查询用户的朋友,甚至朋友的朋友。

2020-05-17