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

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

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


基础分析

第一步,有一张用户表,表内包含用户的基本信息,比如账号、姓名、性别等信息。这里用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作为条件即可查询出用户的好友列表:


select * from tb_friend where user_id = 1

1

互为好友关系

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


select * from tb_friend where user_id = 1 or friend_id = 1

1

2

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


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

1

2

3

注意事项:

- 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如下:


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语句大小限制、性能等问题,可考虑使用左连接进行查询。



相关实践学习
体验RDS通用云盘核心能力
本次实验任务是创建一个云数据库RDS MySQL(通用云盘),并通过云服务器ECS对RDS MySQL实例进行压测,体验IO加速和IO突发带来的性能提升;并通过DMS执行DDL,将数据归档到OSS,再结合云盘缩容,体验数据归档带来的成本优势。
目录
打赏
0
0
0
0
33
分享
相关文章
基于ssm的社区物业管理系统,附源码+数据库+论文+任务书
社区物业管理系统采用B/S架构,基于Java语言开发,使用MySQL数据库。系统涵盖个人中心、用户管理、楼盘管理、收费管理、停车登记、报修与投诉管理等功能模块,方便管理员及用户操作。前端采用Vue、HTML、JavaScript等技术,后端使用SSM框架。系统支持远程安装调试,确保顺利运行。提供演示视频和详细文档截图,帮助用户快速上手。
74 17
基于ssm的超市会员(积分)管理系统,附源码+数据库+论文,包安装调试
本项目为简单内容浏览和信息处理系统,具备管理员和员工权限。管理员可管理会员、员工、商品及积分记录,员工则负责积分、商品信息和兑换管理。技术框架采用Java编程语言,B/S架构,前端使用Vue+JSP+JavaScript+Css+LayUI,后端为SSM框架,数据库为MySQL。运行环境为Windows,JDK8+Tomcat8.5,非前后端分离的Maven项目。提供演示视频和详细文档,购买后支持免费远程安装调试。
89 19
[Java计算机毕设]基于ssm的OA办公管理系统的设计与实现,附源码+数据库+论文+开题,包安装调试
OA办公管理系统是一款基于Java和SSM框架开发的B/S架构应用,适用于Windows系统。项目包含管理员、项目管理人员和普通用户三种角色,分别负责系统管理、请假审批、图书借阅等日常办公事务。系统使用Vue、HTML、JavaScript、CSS和LayUI构建前端,后端采用SSM框架,数据库为MySQL,共24张表。提供完整演示视频和详细文档截图,支持远程安装调试,确保顺利运行。
94 17
基于ssm的网络直播带货管理系统,附源码+数据库+论文
该项目为网络直播带货网站,包含管理员和用户两个角色。管理员可进行主页、个人中心、用户管理、商品分类与信息管理、系统及订单管理;用户可浏览主页、管理个人中心、收藏和订单。系统基于Java开发,采用B/S架构,前端使用Vue、JSP等技术,后端为SSM框架,数据库为MySQL。项目运行环境为Windows,支持JDK8、Tomcat8.5。提供演示视频和详细文档截图。
60 10
基于ssm的台球厅管理系统,附源码+数据库+论文
本项目为新锐台球厅管理系统,支持管理员和会员两种角色。管理员可进行会员管理、台球桌管理、订单管理等;会员可查看台球桌、预约、购买商品等。技术框架基于Java,采用B/S架构,前端使用Vue+HTML+JavaScript+CSS+LayUI,后端使用SSM框架,数据库为MySQL。运行环境为Windows,JDK8+MySQL5.7+Tomcat8.5。提供演示视频及详细文档截图。
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
129 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
139 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
亚太唯一!阿里云连续5年入选Gartner®云数据库管理系统「领导者」象限
亚太唯一!阿里云连续5年入选Gartner®云数据库管理系统「领导者」象限
阿里云连续5年进入领导者象限!Gartner®云数据库管理系统报告发布
阿里云连续5年进入领导者象限!Gartner®云数据库管理系统报告发布
57 3

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等