AI面试平台数据库架构设计详解

📅 2026/7/8 20:43:10
AI面试平台数据库架构设计详解
一、需求背景为 AI 面试平台设计初版数据库方案后续会根据业务迭代持续调整属于演进式设计按微服务边界拆分逻辑分库便于各服务独立演进二、数据库关系图四大业务体系体系间核心关联关联说明商品体系 → 用户体系package_benefit关联account_benefit套餐权益下发到用户面试体系 → 商品体系interview消耗benefit权益用户体系 → 面试体系account发起面试关联resume和interview三、微服务数据库拆分数据库所属服务核心表account_db账号服务account、account_benefit、benefit_task、benefit_usage_logproduct_db商品服务benefit、product_package、package_benefit、product_order、bannerai_dbAI 面试服务interview、interview_round、question、ai_chat_record、resume四、SQL 脚本下载五、账号服务核心表设计account_db5.1 account用户账户表支持多种登录方式手机号、微信等用户角色普通用户/ADMIN 管理员5.2 account_benefit用户权益表记录用户拥有的各类权益面试次数、简历分析次数等支持权益过期时间、剩余次数管理通过benefit_code区分不同权益类型5.3 benefit_task权益任务表记录「当前权益扣减 业务 ID」的事务配合延迟队列实现超时补偿任务失败/超时时退还权益次数5.4 benefit_usage_log权益使用流水表记录每次权益使用的详细日志支持业务追溯与数据统计为权益消耗分析提供数据支撑benefit_usage_log 表结构CREATE TABLE benefit_usage_log ( id bigint NOT NULL AUTO_INCREMENT COMMENT ID, account_id bigint NOT NULL COMMENT 用户账号ID关联account表id, biz_id bigint NOT NULL COMMENT 使用权益ID关联interview、resume表id, benefit_code varchar(64) NOT NULL COMMENT 权益编码, account_benefit bigint NOT NULL COMMENT 用户权益ID关联account_benefit表id, usage_time datetime NOT NULL COMMENT 使用时间, remark varchar(500) DEFAULT NULL COMMENT 使用备注, gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, PRIMARY KEY (id) ) ENGINEInnoDB COMMENT权益使用日志表;六、商品服务核心表设计product_db6.1 benefit权益基础信息表定义系统中所有可购买的权益类型包含价格、有效期等商品属性支持「热门」「推荐」等标签6.2 product_package商品套餐表展示商品套餐相关信息6.3 package_benefit套餐权益关联表套餐与权益的多对多关系定义每个套餐包含哪些权益及对应使用次数6.4 product_order商品订单表支持两种模式购买套餐 / 单独购买权益完整的订单状态流转逻辑支付信息记录支持优惠与多种支付方式6.5 banner轮播图表暂放在 product-service 下简化处理后续可独立 CMS / 运营后台服务七、AI 面试服务核心表设计ai_db7.1 interview面试主表CREATE TABLE interview ( id bigint NOT NULL AUTO_INCREMENT, title varchar(255) DEFAULT NULL COMMENT 面试标题, description varchar(1024) DEFAULT NULL COMMENT 描述, type varchar(255) DEFAULT NULL COMMENT 面试类型专项面、深度面、简历普通面, extend_content varchar(1024) DEFAULT NULL COMMENT 拓展字段, profile varchar(524) DEFAULT NULL COMMENT 用户求职画像, average_score decimal(16,2) DEFAULT NULL COMMENT 平均分, account_id bigint DEFAULT NULL COMMENT 账号ID, resume_id bigint DEFAULT NULL COMMENT 简历ID, status varchar(64) DEFAULT NULL COMMENT 面试状态GENERATING、IN_PROGRESS、EVALUATING, overall_score decimal(16,2) DEFAULT NULL COMMENT 总体评分0-100分, summary varchar(2048) DEFAULT NULL COMMENT 面试总结和评价, strength varchar(1024) DEFAULT NULL COMMENT 优势分析, improvement varchar(1024) DEFAULT NULL COMMENT 需要改进的地方, suggestion varchar(1024) DEFAULT NULL COMMENT 具体建议, technical_skills decimal(16,2) DEFAULT NULL COMMENT 技术能力评分, logical_thinking decimal(16,2) DEFAULT NULL COMMENT 逻辑思维评分, communication decimal(16,2) DEFAULT NULL COMMENT 表达能力评分, problem_solving decimal(16,2) DEFAULT NULL COMMENT 解决问题能力评分, passed_question int DEFAULT NULL COMMENT 及格题目数60分, excellent_question int DEFAULT NULL COMMENT 优秀题目数80分, gmt_create datetime DEFAULT CURRENT_TIMESTAMP, gmt_modified datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;面试状态流转GENERATING生成中 → IN_PROGRESS进行中 → EVALUATING评估中 → 完成7.2 interview_round面试轮次表记录每轮面试信息关联interview_id通过round_number标识第几轮7.3 question题目表CREATE TABLE question ( id bigint NOT NULL AUTO_INCREMENT, interview_id bigint DEFAULT NULL COMMENT 面试ID, account_id bigint DEFAULT NULL, interview_round_id bigint DEFAULT NULL COMMENT 轮次ID, status varchar(255) DEFAULT NULL COMMENT 状态, user_answer varchar(2048) DEFAULT NULL COMMENT 用户答案, evaluation varchar(4096) DEFAULT NULL COMMENT 题目点评, content varchar(2048) DEFAULT NULL COMMENT 题目内容, type varchar(255) DEFAULT NULL COMMENT CODING, SHORT_ANSWER, difficulty varchar(255) DEFAULT NULL COMMENT BEGINNER, INTERMEDIATE, ADVANCED, category varchar(255) DEFAULT NULL COMMENT 题目分类Java基础、Spring框架、数据库等, standard_answer varchar(2048) DEFAULT NULL COMMENT 标准答案, key_points varchar(510) DEFAULT NULL COMMENT 关键要点JSON格式, max_score int DEFAULT 100 COMMENT 满分分值100, time_limit int DEFAULT NULL COMMENT 答题时间限制分钟, user_score int DEFAULT NULL COMMENT 回答评分, gmt_create datetime DEFAULT CURRENT_TIMESTAMP, gmt_modified datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;7.4 ai_chat_recordAI 对话记录表CREATE TABLE ai_chat_record ( id bigint NOT NULL AUTO_INCREMENT COMMENT 主键, account_id bigint NOT NULL COMMENT 用户ID租户ID, interview_id bigint NOT NULL COMMENT 面试ID, record_type varchar(64) NOT NULL COMMENT METADATA-会话元信息, MESSAGE-消息内容, role varchar(32) DEFAULT NULL COMMENT 角色user/assistant/system, content text NOT NULL COMMENT 会话标题或消息内容, sequence int DEFAULT NULL COMMENT 消息序号同会话内递增, gmt_create datetime DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, status varchar(64) DEFAULT ONGOING COMMENT 会话状态ONGOING-进行中, ENDED-已结束, PRIMARY KEY (id), KEY idx_user_session_type (account_id, interview_id, record_type) ) ENGINEInnoDB COMMENTAI对话记录会话消息合并表;设计亮点 会话元信息与消息内容合并在一张表通过record_type区分减少表关联查询。7.5 resume简历表CREATE TABLE resume ( id bigint NOT NULL AUTO_INCREMENT, account_id bigint DEFAULT NULL, filename varchar(255) DEFAULT NULL, file_path varchar(255) DEFAULT NULL, file_type varchar(255) DEFAULT NULL, content varchar(10000) DEFAULT NULL, skill_tags varchar(524) DEFAULT NULL, evaluation varchar(5000) DEFAULT NULL COMMENT AI简历分析, status varchar(64) DEFAULT NULL COMMENT 解析状态, gmt_create datetime DEFAULT CURRENT_TIMESTAMP, gmt_modified datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;八、AI 编辑器绘制 ER 图实战8.1 实战任务使用interview.sql数据库结构文件让 AI 绘制 ER 图该 SQL 文件包含 15 张表的结构定义包括account用户表、interview面试表、question问题表、benefit权益表、product_order订单表等。请分析表之间的关联关系外键、一对多、多对一等以清晰的 ER 图形式展示包含所有表字段、主键PK、外键FK及表间连线。8.2 创建微服务数据库CREATE DATABASE account_db DEFAULT CHARACTER SET utf8mb4; -- 账号数据库 CREATE DATABASE product_db DEFAULT CHARACTER SET utf8mb4; -- 商品数据库 CREATE DATABASE ai_db DEFAULT CHARACTER SET utf8mb4; -- AI面试数据库分别导入对应 SQL 脚本即可。九、常见问题Too many connections9.1 问题原因多个微服务连接同一 MySQL 实例各服务连接池叠加后容易耗尽连接数导致新连接无法建立。9.2 排查与解决-- 1. 查询当前允许的最大连接数 -- 建议8核16G 服务器设置在 500~2000 之间 SHOW VARIABLES LIKE max_connections; -- 2. 查看当前已打开的连接数 SHOW STATUS LIKE Threads_connected; -- 3. 查看历史连接数峰值 SHOW STATUS LIKE Max_used_connections; -- 4. 临时调大连接数需结合可用内存评估 SET GLOBAL max_connections 500;9.3 优化建议方向措施配置调整合理设置max_connections监控连接峰值连接池优化各微服务连接池maximum-pool-size不宜过大代码层面确保连接及时释放避免连接泄漏架构演进后续可物理分库各服务独立 MySQL 实例十、设计亮点总结设计点说明逻辑分库按微服务边界拆分三库便于独立演进权益体系benefit_task 延迟队列实现超时补偿保证权益扣减可靠性流水追溯benefit_usage_log 全量记录支持统计与审计会话合并ai_chat_record 合并会话与消息减少 JOIN多维评分interview 表支持技术/逻辑/表达/解决问题等多维度 AI 评分演进式设计初版方案随业务迭代持续优化十一、全表清单速查数据库表名中文名account_dbaccount用户账户表account_dbaccount_benefit用户权益表account_dbbenefit_task权益任务表account_dbbenefit_usage_log权益使用流水product_dbbenefit权益基础信息表product_dbproduct_package商品套餐表product_dbpackage_benefit套餐权益关联表product_dbproduct_order商品订单表product_dbbanner轮播图表ai_dbinterview面试主表ai_dbinterview_round面试轮次表ai_dbquestion题目表ai_dbai_chat_recordAI 对话记录表ai_dbresume简历表