我正在创建一个涉及可以成为朋友的用户的数据库模式,我想知道如何才能对这些用户建立友谊的能力进行建模.它自己的表应该只有两列,每列代表一个用户吗?谢谢!

推荐答案

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;

您可以使用最后一个查询创建一个视图,它将帮助您查询用户的朋友,甚至朋友的朋友.

Database相关问答推荐

找不到复制副本集

无法连接MatrixOne(来自GitHub)

触发器作为完整性的判断约束

如何使用 Gramex FormHandler 动态(在运行时)创建或更改数据库模式

文件存储的推荐位置 - 在数据库或其他什么地方?

如何将表字段的默认值设置为 0.00?

PostgreSQL 参数化 Order By / Limit in table 函数

创建数据库索引有哪些最佳实践和经验法则?

在 Oracle 中查找数据库的大小

设计用于存储多人游戏的各种要求和统计数据的表格

无法在 MYSQL 5.5 w/MYSQL Workbench 中更改模式名称

避免从网站数据库中data scraping数据抓取?

生成和读取条形码

Hibernate 的 MariaDB 方言类名称是什么?

对于 Postgres (Windows),有没有像 TOAD 一样好的东西?

为 Java servlet 管理数据库连接的最佳方法

获取错误函数 to_date(timestamp without time zone, unknown) 不存在

不带 WHERE 子句的 UPDATE 查询

最小覆盖和功能依赖

数据库索引及其 Big-O 表示法