为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2021-12-01 19:06:58
所以我的项目有一个“朋友列表”,在 MySQL 数据库中我创建了一个表:姓名A姓名B主键(名称A,名称B)这将导致大量条目,但为了确保我的数据库规范化,我不知道如何实现这一目标?我的项目也使用 Redis。我可以将它们存储在那里。当一个人加入服务器时,我必须搜索所有条目,看看他们的名字是nameA还是nameB,然后将这两个名字放在一起作为朋友,这也可能效率低下。干杯。
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

任务很普通。您想存储 A|B 与 B|A 具有相同含义的对。由于表有列,两者之一将存储在第一列中,另一个存储在第二列中,但是谁先存储谁第二,为什么?


一种解决方案是始终首先存储较小的 ID,然后存储较大的 ID:


用户 ID1 | 用户名2

--------+--------

1       | 2

2       | 5

2       | 6

4       | 5

这样做的好处是您每对只存储一次,感觉很自然,但缺点是您必须在两个 couns 中查找一个人,有时在第一列中找到他们的朋友,有时在第二列中找到他的朋友。这可能会使查询变得笨拙。


另一种方法是冗余存储对(通常使用触发器):


用户 ID1 | 用户名2

--------+--------

1       | 2

2       | 1

2       | 5

2       | 6

4       | 5

5       | 2

5       | 4

6       | 2

在这里查询更容易:在一个列中查找此人并在另一列中找到他们的朋友。但是,将所有对都复制看起来有点奇怪。而且你依赖于一些人不喜欢的触发器。


第三种方法是存储编号的友谊:


友谊 | 用户身份

-----------+--------

1          | 1

1          | 2

2          | 2

2          | 5

3          | 2

3          | 6

4          | 4

4          | 5

这为配对中的两个用户提供了相等的价值。但是为了找到朋友,你需要通过:为用户找到朋友,在这些朋友中找到朋友。但是,设计非常清晰,甚至可以扩展,即您可以拥有三个四个或更多用户的友谊。


没有一种方法确实比另一种好得多。


查看完整回答
反对 回复 2021-12-01
  • 1 回答
  • 0 关注
  • 332 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信