首页 > 解决方案 > 如何实现同一张表的一对多关系?

问题描述

我有一个名为 user 的表。现在我正在构建一个用户可以有很多用户作为朋友的应用程序。所以我认为我应该创建一个名为 friends_list 的新表并实现一对多的关系,其中 (user) 是一个并且 (friends_list) 是多个。然后要获取用户拥有的朋友列表,我可以这样做select * from friends where userId = XXXx. 这是最好的方法吗?还是有另一种更好的方法来创建与同一张表的关系?

标签: sqldatabase

解决方案


你的方法是最好的方法。您想表示一个 nm 关系(一个用户有很多朋友,反之亦然)。

有一些考虑。如果“友谊”是对称的(即 A 朋友 B 自动意味着 B 朋友 A),那么当插入一个时,您可能希望将两者都包含在表中。您可能还想阻止用户自我交友。

如果您想以列表的形式检索用户的朋友,您可以使用字符串连接函数来实现。在标准 SQL 中,这是:

select listagg(friendid, ',') within group (order by friendid) as friendids
from friends
where userid = XXX;

不同的数据库对listagg().


推荐阅读