LearnLink伙伴匹配系统笔记

项目介绍

帮助大家找到学习伙伴的移动端 H5 网站(APP 风格),基于 Spring Boot 后端 + Vue3 前端的 全栈项目,包括用户登录、更新个人信息、按标签搜索用户、建房组队、推荐相似用户等功能。

需求分析

  1. 用户去添加标签,标签的分类(要有哪些标签、怎么把标签进行分类)学习方向 java / c++,工作 / 大学
  2. 主动搜索:允许用户根据标签去搜索其他用户
    1. Redis 缓存
  3. 组队
    1. 创建队伍
    2. 加入队伍
    3. 根据标签查询队伍
    4. 邀请其他人
  4. 允许用户去修改标签
  5. 推荐
    1. 相似度计算算法 + 本地实时计算

技术栈

前端

  • Vue 3 开发框架(提高页面开发的效率)
  • Vant UI(基于 Vue 的移动端组件库)(React 版 Zent)
  • Vite 2(打包工具,快!)
  • Nginx 来单机部署

后端

  • Java 编程语言 + SpringBoot 框架
  • SpringMVC + MyBatis + MyBatis Plus(提高开发效率)
  • MySQL 数据库
  • Redis 缓存
  • Swagger + Knife4j 接口文档

前端初始化+前端设计

数据库表设计

标签的分类

新增标签表

建议用标签,不用分类,更灵活

数据库四件套:id、createTime、updateTime、isDelete
用户自定义标签?
:::success
SQL语言分类:
①DDL define建表、操作表
②DML manage更新删除数据,影响实际表里的内容
③DCL control控制,权限
④DQL query查询,select
:::

修改用户表

想修改用户表,就要知道用户有哪些标签

此处选择第一种 (根据自己的实际需求来!!!没有任何一种设计能适用于所有的场景👻**)**

  1. **直接在用户表补充 tags 字段,[‘Java’, ‘男’] 存 json 字符串 **
    优点:查询方便、不用新建关联表,标签是用户的固有属性
    (除了该系统、其他系统可能要用到,标签是用户的固有属性) 节省开发成本

应用场景:查询用户列表,查关系表拿到这 100 个用户有的所有标签 id,再根据标签 id 去查标签表。
缺点:用户表多一列,会有点
哪怕性能低,可以用redis缓存

  1. 加一个关联表,记录用户和标签的关系
    关联表的应用场景:查询灵活,可以正查反查

缺点:要多建一个表、多维护一个表
重点:企业大项目开发中尽量减少关联查询,很影响扩展性,而且会影响查询性能

1
alter table user add COLUMN tags varchar(1024)null comment'标签json列表'

之后可能要经常通过这个标签名去搜索,给标签名加上唯一索引,上传标签的用户加上普通索引

后端初始化

直接在用户中心的基础上写,其实也可以分离开,但这里就不做了
UserServiceImpl里写方法,查询tag,老三样了
不再赘述

:::success
问题:SQL查询和内存查询,在特定的情况下,哪个会更快呢?
:::

  1. SQL查询
  2. 内存查询

的区别?