前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >社交系统中用户好友关系数据库设计

社交系统中用户好友关系数据库设计

作者头像
程序新视界
发布2022-05-09 19:18:32
9250
发布2022-05-09 19:18:32
举报
文章被收录于专栏:丑胖侠丑胖侠

在社交类系统中,用户与用户的好友关系的设计必不可少,那么如何设计好友的数据库至关重要,本篇文章带大家学习一下相关的设计方案。

基础分析

第一步,有一张用户表,表内包含用户的基本信息,比如账号、姓名、性别等信息。这里用tb_user表示用户信息表。

ID

用户名

1

张三

2

李四

3

王五

4

赵六

第二步,需要将用户与用户直接建立好友关系。这里有两种情况:单向好友关系、互为好友关系。 - 单向好友关系就是张三在李四的好友列表中,但李四没有在张三的好友列表中; - 互为好友关系,如果张三和李四为好友,则双方都在彼此的好友列表中;

好友关系设计

无论上面两种关系的哪一种,好友关系表都可以使用下面的设计,表tb_friend:

ID

user_id

friend_id

1

1

2

2

1

3

示例中,张三拥有李四和王五两个好友。

单向好友模式

如果是单向好友模式,那么两个人互为好友关系则插入的数据应该是这样:

ID

user_id

friend_id

1

1

2

2

2

1

也就是张三是李四的好友,李四也是张三的好友。此时使用sql语句查询时只用限定user_id作为条件即可查询出用户的好友列表:

代码语言:javascript
复制
select * from tb_friend where user_id = 1

互为好友关系

因为是互为好友关系,则只需要插入一条数据即可。对应的查询语句为:

代码语言:javascript
复制
select * from tb_friend where user_id = 1 or friend_id = 1

当然也可以使用UNION ALL来实现:

代码语言:javascript
复制
select friend_id as friends from tb_friend  where user_id = 1
UNION ALL --使用UNION ALL,因为不存在重复的
select user_id as friends from tb_friend where friend_id = 1

注意事项: - user_id1–>friend_id2和user_id2–>friend_id1是相同的记录,不需要重复插入; - 为了快速判断两个人是不是好友,可在程序层插入数据前添加一个限制user_id1 < user_id2; - 可加入缓存层(Redis或Memcached)来提高性能; - 可从数据库层限制(user_id,friend_id)不可重复;

加入分组

如果好友数量比较多,关系比较复杂,可引入好友分组,可进行如下改造:

ID

user_id

friend_id

user_group

friend_group

1

1

2

好友

同学

2

1

3

同学

同学

在数据库中添加了user_group,当前user给friend设置的分组,friend_group是当前user的朋友对其设置的分组类别。

于是,查询好友列表的SQL如下:

代码语言:javascript
复制
select friend_id as friends ,user_group as my_group from tb_friends where user_id = 1

UNION ALL

select user_id as friends , friend_group as my_group from friend_id = 1

小结

至此社交系统中好友关系的设计及SQL语句使用基本完成。可根据具体的业务情况进行修改。在查询除好友的id列表之后就可以进行好友信息的查询。此处需要注意的是如果用in语句来查询会有不走索引、sql语句大小限制、性能等问题,可考虑使用左连接进行查询。

原文链接:https://www.choupangxia.com/topic/detail/74

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础分析
  • 好友关系设计
    • 单向好友模式
    • 互为好友关系
    • 加入分组
    • 小结
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档