账号表
CREATE TABLE `account`
(
`id` BIGINT NOT NULL COMMENT '主键ID',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`account` VARCHAR(64) NOT NULL COMMENT '账号',
`password` VARCHAR(128) NOT NULL COMMENT '密码',
`account_type` int DEFAULT 1 COMMENT '账号类型 {[1:邮箱] [2:手机] [3:工号]}'
........
)
用户表
CREATE TABLE `user`
(
`id` BIGINT NOT NULL COMMENT '主键ID',
`name` VARCHAR(128) NOT NULL COMMENT '姓名',
`avatar` VARCHAR(255) default null comment '头像',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注'
........
)
员工信息表
CREATE TABLE `employee`
(
`id` BIGINT NOT NULL COMMENT '主键ID',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`employee_no` int NOT NULL COMMENT '工号',
`join_date` date NOT NULL COMMENT '入职时间'
........
)
user与account是一对多
user与employee是一对一
系统需要支持以工号、邮箱、手机号登录(手机验证码或密码)
在上述表设计中会存在一下问题
- 查询用户信息的时候需要显示邮箱、手机号、工号等信息,如果用户表中没有这些信息,则需要通过关联查询账号表,但是如果用户表中存在这些信息,则需要冗余这些字段,并且修改账号表数据时需要同步修改冗余字段
- 用户表与账号表是一对多,同一个用户多个账号的密码是相同的,修改密码就需要同步修改多个账号
- 查询用户信息的时候表需要跨多张表
- 有些情况用户不一定是员工,可能是临时用户所有区分了用户表和员工表
- 如果user冗余(邮箱、手机号、工号)的话是需要加密存储的,这种情况账号表需要加密吗,常规做法是怎么样的
根据以上情况,这些表改如何优化
感觉 直接去掉
account
表,相关字段 放回user
表就解决问题了1 邮箱、手机号、工号 等都在
user
表里了2 密码只有一个在
user
表里3 查询用户信息的时候不跨表
4 没有
employee
信息的就是临时用户登录的时候根据用户表单输入或者选择的类型,直接从
account
里查找也没啥问题