将好友列表实现到数据库中的最佳方法?MySQL

所以我的项目有一个“朋友列表”,在 MySQL 数据库中我创建了一个表:

姓名A

姓名B

主键(名称A,名称B)

这将导致大量条目,但为了确保我的数据库规范化,我不知道如何实现这一目标?

我的项目也使用 Redis。我可以将它们存储在那里。

当一个人加入服务器时,我必须搜索所有条目,看看他们的名字是nameA还是nameB,然后将这两个名字放在一起作为朋友,这也可能效率低下。

干杯。


繁花不似锦
浏览 333回答 1
1回答

慕工程0101907

任务很普通。您想存储 A|B 与 B|A 具有相同含义的对。由于表有列,两者之一将存储在第一列中,另一个存储在第二列中,但是谁先存储谁第二,为什么?一种解决方案是始终首先存储较小的 ID,然后存储较大的 ID:用户 ID1 | 用户名2--------+--------1       | 22       | 52       | 64       | 5这样做的好处是您每对只存储一次,感觉很自然,但缺点是您必须在两个 couns 中查找一个人,有时在第一列中找到他们的朋友,有时在第二列中找到他的朋友。这可能会使查询变得笨拙。另一种方法是冗余存储对(通常使用触发器):用户 ID1 | 用户名2--------+--------1       | 22       | 12       | 52       | 64       | 55       | 25       | 46       | 2在这里查询更容易:在一个列中查找此人并在另一列中找到他们的朋友。但是,将所有对都复制看起来有点奇怪。而且你依赖于一些人不喜欢的触发器。第三种方法是存储编号的友谊:友谊 | 用户身份-----------+--------1          | 11          | 22          | 22          | 53          | 23          | 64          | 44          | 5这为配对中的两个用户提供了相等的价值。但是为了找到朋友,你需要通过:为用户找到朋友,在这些朋友中找到朋友。但是,设计非常清晰,甚至可以扩展,即您可以拥有三个四个或更多用户的友谊。没有一种方法确实比另一种好得多。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java