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

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

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


基础分析

第一步,有一张用户表,表内包含用户的基本信息,比如账号、姓名、性别等信息。这里用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语句大小限制、性能等问题,可考虑使用左连接进行查询。



目录
相关文章
|
14天前
|
存储 安全 搜索推荐
酒店管理系统的数据库的应用以及选择
酒店管理系统数据库关乎运营效率和服务质量。数据库用于数据存储、管理、分析及客户关系管理,确保房态与预订精准。选择时重视性能稳定性、数据安全、易用性、可扩展性和成本效益。合适的数据库能提升酒店运营效率并优化客户体验。
21 2
|
23天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
25天前
|
安全 网络安全 数据库
数据安全之认识数据库漏洞扫描系统
数据库漏洞扫描系统是一种专业的数据库安全产品,它基于对数据库访问控制、数据库审计、资源管理、数据库加密以及数据库系统本身安全机制的深入分析,深入研究和发现数据库系统本身存在的BUG以及数据库管理、使用中存在的问题。
38 4
|
1月前
|
SQL 监控 安全
数据安全之认识数据库审计系统
随着企业业务数据量的不断增长和数据存储的集中化,数据库成为企业的核心资产之一。然而,数据库面临着各种安全威胁,如SQL注入、权限滥用、数据泄露等。为了保障数据库的安全性和完整性,企业需要采取有效的审计措施来监控和记录数据库的操作行为。本文让我们一起来认识数据库审计系统。
32 1
|
1天前
|
XML 存储 数据库
工作流JBPM系统数据库表介绍
工作流JBPM系统数据库表介绍
|
14天前
|
存储 NoSQL 安全
物流系统数据库的应该以及选择
物流系统数据库在信息化建设中扮演关键角色,用于数据存储、管理和共享,支持决策,并优化资源配置。选择数据库时要考虑类型(如关系型或NoSQL)、性能稳定性、成本易用性、安全性和未来发展需求。完善数据管理与安全措施,确保数据准确性和系统扩展性,是提升物流效率和企业竞争力的关键。
16 3
|
1月前
|
SQL 存储 安全
【软件设计师备考 专题 】数据库管理系统的功能和特征
【软件设计师备考 专题 】数据库管理系统的功能和特征
73 0
|
1月前
|
SQL 编解码 数据库
MyKtv点歌系统前台主要功能实现,内附数据库脚本,可以直接运行
MyKtv点歌系统前台主要功能实现,内附数据库脚本,可以直接运行
14 1
MyKtv点歌系统前台主要功能实现,内附数据库脚本,可以直接运行
|
1月前
|
存储 分布式计算 大数据
现代化数据库技术——面向大数据的分布式存储系统
传统的关系型数据库在面对大规模数据处理时遇到了诸多挑战,而面向大数据的分布式存储系统应运而生。本文将深入探讨现代化数据库技术中的分布式存储系统,包括其优势、工作原理以及在大数据领域的应用。
|
1月前
|
架构师 算法 关系型数据库
数据库架构师之道:MySQL安装与系统整合指南
数据库架构师之道:MySQL安装与系统整合指南
45 0

热门文章

最新文章