多账号数据库表如何设计?-灵析社区

Fronttend

账号表 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是一对一 ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241127/54453a89b00f2e03685762c5bffdabd1.png) **系统需要支持以工号、邮箱、手机号登录(手机验证码或密码)** 在上述表设计中会存在一下问题 1. 查询用户信息的时候需要显示邮箱、手机号、工号等信息,如果用户表中没有这些信息,则需要通过关联查询账号表,但是如果用户表中存在这些信息,则需要冗余这些字段,并且修改账号表数据时需要同步修改冗余字段 2. 用户表与账号表是一对多,同一个用户多个账号的密码是相同的,修改密码就需要同步修改多个账号 3. 查询用户信息的时候表需要跨多张表 4. 有些情况用户不一定是员工,可能是临时用户所有区分了用户表和员工表 5. 如果user冗余(邮箱、手机号、工号)的话是需要加密存储的,这种情况账号表需要加密吗,常规做法是怎么样的 根据以上情况,这些表改如何优化

阅读量:13

点赞量:0

问AI
感觉 直接去掉 "account" 表,相关字段 放回 "user" 表就解决问题了 1 邮箱、手机号、工号 等都在 "user" 表里了 2 密码只有一个在 "user" 表里 3 查询用户信息的时候不跨表 4 没有 "employee" 信息的就是临时用户 登录的时候根据用户表单输入或者选择的类型,直接从 "account" 里查找也没啥问题