weblog/doc/5、整合 SaToken 实现 JWT 登录功能/5.1 原型图分析、用户表设计.md
2025-02-17 10:05:44 +08:00

4.6 KiB
Raw Blame History

上一章中,我们已经将小哈书项目的基础骨架搭建完成了。本章中,正式进入到第一个业务模块的开发 —— 用户认证

1. 什么是用户认证?

用户认证就是指用户登录的意思,是一个用户身份验证过程,确保用户提供的凭据(如用户名和密码)与系统中存储的数据匹配,从而允许用户访问系统。

2. 原型图分析

以下截图自小红书 APP 的登录界面:

可以看到小红书 APP 支持的登录方式比较多,有微信授权登录、手机号登录、其他第三方平台授权登录。不过,现阶段我们只实现手机号方式登录。

想要实现用户登录,数据库层面,则必然需要一张用户表,用于存储用户的账号,小红书则是使用手机号充当账号。另外,用户表中还需要存储额外的一些信息,如下图所示,编辑用户资料,还有头像、昵称、小红书号等等:

3. 表设计

通过原型图,我们来设计一下 t_user 用户表, 建表语句如下:

CREATE TABLE `t_user` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `xiaohashu_id` varchar(15) NOT NULL COMMENT '小哈书号(唯一凭证)',
  `password` varchar(64) DEFAULT NULL COMMENT '密码',
  `nickname` varchar(24) NOT NULL COMMENT '昵称',
  `avatar` varchar(120) DEFAULT NULL COMMENT '头像',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `background_img` varchar(120) DEFAULT NULL COMMENT '背景图',
  `phone` varchar(11) NOT NULL COMMENT '手机号',
  `sex` tinyint DEFAULT '0' COMMENT '性别(0女 1男)',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0启用 1禁用)',
  `introduction` varchar(100) DEFAULT NULL COMMENT '个人简介',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '逻辑删除(0未删除 1已删除)',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `uk_xiaohashu_id` (`xiaohashu_id`),
  UNIQUE KEY `uk_phone` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';

解释一下以上语句:

列:

  • id:自增主键,类型为无符号大整数(bigint unsigned),自动递增(AUTO_INCREMENT)。
  • xiaohashu_id:用户的小哈书号(varchar(15)),不允许为空(NOT NULL),是用户的唯一标识,默认由系统自动生成,后续用户也可以手动修改,类似于微信号。
  • password:用户密码(varchar(64)),默认为空;
  • nickname:用户昵称(varchar(24)),不允许为空,初次注册时,系统会默认生成一个昵称,比如:小红薯001
  • avatar:用户头像的 URLvarchar(120)),默认为空。
  • birthday:用户生日(date),默认为空。
  • background_img:用户背景图的 URLvarchar(120)),默认为空。
  • phone:用户手机号(varchar(11)),不允许为空。
  • sex:用户性别(tinyint),默认为 00 表示女1 表示男)。
  • status:用户状态(tinyint),默认为 00 表示启用1 表示禁用)。
  • introduction:个人简介(varchar(100)),默认为空。
  • create_time:记录创建时间(datetime),默认值为当前时间(CURRENT_TIMESTAMP),不允许为空。
  • update_time:记录更新时间(datetime),默认值为当前时间(CURRENT_TIMESTAMP),不允许为空。
  • is_deleted:逻辑删除标志(bit(1)),默认为 00 表示未删除1 表示已删除)。

索引与约束:

  • PRIMARY KEY (id) USING BTREE:主键为 id 列,使用 B+Tree 进行索引。
  • UNIQUE KEY uk_xiaohashu_id (xiaohashu_id):唯一索引,对 xiaohashu_id 列设置,确保每个小哈书号唯一性,同时该列也是后续业务逻辑中常用的查询条件,添加索引以提升查询性能。
  • UNIQUE KEY uk_phone (phone):唯一索引,对 phone 列设置,确保每个手机号唯一,同时该列也是后续业务逻辑中常用的查询条件,添加索引以提升查询性能。

表设计完成后,别忘了连接上之前创建的 xiaohashu 数据库,将之前测试用的 t_user 表删除掉,再执行一下该建表语句: