发布时间:2024-07-05编辑:lianpenglin阅读(662)
今天我们来讲讲派单系统的数据库设计,根据前文我们对系统功能模块的划分,首先来讲用户侧数据库设计。
用户侧功能有用户登录,用户充值,下单等,我们设计用户数据库只保存用户的一些基本信息,充值和下单等功能我们保存到订单数据库和财务数据库中。
数据库名:db_customer
用户信息表:t_customer_main,具体结构:
CREATE TABLE `t_customer_main` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用户名', `gender` tinyint NOT NULL DEFAULT '1' COMMENT '性别 1.男 2.女', `birthday` date DEFAULT NULL COMMENT '生日', `phone` varchar(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '手机号', `user_center_id` varchar(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户ID', `email` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '邮箱地址', `car_num` varchar(20) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '车牌号', `backup_phone` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备用手机', `city_id` varchar(100) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '注册城市ID', `type` tinyint NOT NULL DEFAULT '0' COMMENT '用户类型 0.普通用户 1.VIP用户', `company` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '企业类型', `vip_card` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'vip卡号', `status` tinyint NOT NULL DEFAULT '0' COMMENT '用户状态 0.默认 1.正常 2.屏蔽 3.删除', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `customer_phone_uniq` (`phone`), UNIQUE KEY `customer_user_id_uniq` (`user_center_id`), KEY `city_id` (`city_id`), KEY `create_time` (`create_time`), KEY `name` (`name`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户主账户表';
用户主表包含用户名、生日、性别、手机号、用户ID、注册城市、账户类型、状态、创建时间等常用字段,我们限制一个手机号只能对应一个用户,所以给phone字段增加了唯一索引,增加了用户id这个字段的目的是为了各个系统之间和用户系统交互都用user_center_id而不是用phone,方便后期用户修改手机号操作。
用户扩展表:t_customer_ext ,
CREATE TABLE `t_customer_ext` ( `id` int NOT NULL AUTO_INCREMENT, `main_id` int NOT NULL DEFAULT '0' COMMENT '主表ID', `invoice_title` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发票抬头', `invoice_remark` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发票备注', `bill_receive_mode` tinyint NOT NULL DEFAULT '0' COMMENT '账单接受方式 0.默认 1.短信 2.邮件 3.短信邮件', `is_verify` tinyint NOT NULL DEFAULT '0' COMMENT '用户是否已认证 0.没认证 1.已认证', `channel` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用户来源', `remark` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', `address` varchar(300) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '常用目的地', `operator` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT '操作人', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `last_login` datetime DEFAULT NULL COMMENT '最后登录时间', `app_ver` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客户端版本号', `trip_recording` tinyint NOT NULL DEFAULT '0' COMMENT '是否行程录音', PRIMARY KEY (`id`), UNIQUE KEY `customer_phone_uniq` (`main_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户扩展表';
用户扩展表用来存储用户更新和查询不是特别频繁的字段,这样我们就把用户相关的数据进行了水平分表,大家可以考虑一下这种分表模式的好处和坏处,欢迎留言探讨。
用户token表:t_customer_token
CREATE TABLE `t_customer_token` ( `id` int NOT NULL AUTO_INCREMENT, `phone` varchar(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '客户电话', `user_center_id` varchar(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户ID', `authtoken` varchar(32) COLLATE utf8mb4_general_ci NOT NULL, `login_status` tinyint NOT NULL DEFAULT '0' COMMENT '登录状态', `expired` int NOT NULL COMMENT '过期时间', `create_time` datetime NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `authtoken` (`authtoken`), KEY `idx_user_center_id` (`user_center_id`), KEY `phone` (`phone`), ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户token';
用户每次登录后会生成一条token记录,同时将authtoken返回给前端,之后前端所有接口调用都需要加上token这个参数来校验。token生成逻辑是时间戳+用户手机号后四位+三位随机数,最后md5得到,token默认有效期为3个月,现在不支持多点登录,所以每次登录之后,会清楚之前未过期的token,保证同时只有一个token有效。
以上就是用户表相关设计,因为本系统只是开发一个基础的功能,所以不需要太多表,大家可以根据自己需求自行增加数据表。
标签: golang
如果对你有用打赏一下吧!