4.6 KiB
4.6 KiB
上一章中,我们已经将小哈书项目的基础骨架搭建完成了。本章中,正式进入到第一个业务模块的开发 —— 用户认证。
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:用户头像的 URL(varchar(120)),默认为空。birthday:用户生日(date),默认为空。background_img:用户背景图的 URL(varchar(120)),默认为空。phone:用户手机号(varchar(11)),不允许为空。sex:用户性别(tinyint),默认为 0(0 表示女,1 表示男)。status:用户状态(tinyint),默认为 0(0 表示启用,1 表示禁用)。introduction:个人简介(varchar(100)),默认为空。create_time:记录创建时间(datetime),默认值为当前时间(CURRENT_TIMESTAMP),不允许为空。update_time:记录更新时间(datetime),默认值为当前时间(CURRENT_TIMESTAMP),不允许为空。is_deleted:逻辑删除标志(bit(1)),默认为 0(0 表示未删除,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 表删除掉,再执行一下该建表语句: