浪花是一个根据标签匹配好友,进行组队的系统,先考虑这个系统需要创建哪些表。
从系统的需求出发:
- 根据标签搜索用户:用户表(存储用户信息和用户拥有的标签信息),通过"tags"标签字段进行模糊匹配,检索出符合标签的用户
- 用户自定义标签:标签表,考虑到用户可以自定义标签,所以需要设计了一个标签表来存储标签信息和上传该标签的用户 Id(如果没有自定标签这个功能,直接在后端枚举所有标签即可,不需要创建标签表)
1. 标签信息(存在 user 表的 tags 字段中)
性别:男 / 女
学习方向:Java / C++ / Go / 前端
目标:考研 / 春招 / 秋招 / 考公 / 竞赛(再细分为具体的竞赛) / 转行 / 跳槽
段位:初级 / 中级 / 高级 / 王者
阶段:大一 / 大二 / 大三 / 大四 / 学生 / 待业 / 已就业 / 研一 / 研二 / 研三
状态:乐观 / 有点丧 / 一般
2. 建表语句
-- auto-generated definition
create table tag
(
id bigint auto_increment comment 'id'
primary key,
tag_name varchar(256) null comment '标签名称',
user_id bigint null comment '用户 id',
parent_id bigint null comment '父标签 id',
is_parent tinyint null comment '0 - 不是, 1 - 父标签',
create_time datetime default CURRENT_TIMESTAMP null comment '创建时间',
update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
is_delete tinyint default 0 not null comment '是否删除',
constraint unique_tag_name
unique (tag_name)
)
comment '标签';
3. 考虑系统需求
初步定义完字段之后,考虑现有的字段能不能满足这个系统的需求,在使用场景里面进行考虑,并补充缺少的字段
????????按父标签 id 分组?
?????????根据 id 查询?
这里的用户表复用之前做过的【用户中心】项目的 user 表,字段都相同,新增一个标签信息 tags 的字段即可,
1. 补充字段 tags
alter table user add COLUMN tags varchar(1024) null comment '标签';
附:user 表的建表语句
-- auto-generated definition
create table user
(
id bigint auto_increment
primary key,
username varchar(256) null comment '用户名',
user_account varchar(256) null comment '账号',
avatar_url varchar(1024) null comment '用户头像',
gender tinyint null comment '性别',
user_password varchar(512) default '12345678' not null comment '密码',
phone varchar(128) null comment '电话',
email varchar(512) null comment '邮箱',
user_status int default 0 not null comment '用户状态 0: 正常',
create_time timestamp default CURRENT_TIMESTAMP null comment '创建时间',
update_time datetime null comment '更新时间',
is_delete tinyint default 0 null comment '逻辑删除',
is_valid tinyint default 0 null,
user_role int default 0 not null comment '角色',
planet_code varchar(512) null comment '星球编号',
tags varchar(1024) null comment '标签'
)
comment '用户';
2. 添加索引
标签名 tag_name
上传标签的用户 id user_id
SELECT <字段名表> FROM <表或视图名> WHERE <查询条件>
插入:INSERT
更新:UPDATE
删除:DELETE
CREATE TABLE / VIEW / INDEX / SYN / CLUSTER