当前位置: 首页 > news >正文

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

一、需求背景

  • 为 AI 面试平台设计初版数据库方案
  • 后续会根据业务迭代持续调整,属于演进式设计
  • 按微服务边界拆分,逻辑分库,便于各服务独立演进

二、数据库关系图(四大业务体系)

体系间核心关联

关联说明
商品体系 → 用户体系package_benefit关联account_benefit,套餐权益下发到用户
面试体系 → 商品体系interview消耗benefit权益
用户体系 → 面试体系account发起面试,关联resumeinterview

三、微服务数据库拆分

数据库所属服务核心表
account_db账号服务account、account_benefit、benefit_task、benefit_usage_log
product_db商品服务benefit、product_package、package_benefit、product_order、banner
ai_dbAI 面试服务interview、interview_round、question、ai_chat_record、resume

四、SQL 脚本下载

五、账号服务核心表设计(account_db)

5.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`) ) ENGINE=InnoDB COMMENT='权益使用日志表';

六、商品服务核心表设计(product_db)

6.1 benefit(权益基础信息表)

  • 定义系统中所有可购买的权益类型
  • 包含价格、有效期等商品属性
  • 支持「热门」「推荐」等标签

6.2 product_package(商品套餐表)

  • 展示商品套餐相关信息

6.3 package_benefit(套餐权益关联表)

  • 套餐与权益的多对多关系
  • 定义每个套餐包含哪些权益及对应使用次数

6.4 product_order(商品订单表)

  • 支持两种模式:购买套餐 / 单独购买权益
  • 完整的订单状态流转逻辑
  • 支付信息记录,支持优惠与多种支付方式

6.5 banner(轮播图表)

  • 暂放在 product-service 下简化处理
  • 后续可独立 CMS / 运营后台服务

七、AI 面试服务核心表设计(ai_db)

7.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`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_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`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

7.4 ai_chat_record(AI 对话记录表)

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`) ) ENGINE=InnoDB COMMENT='AI对话记录(会话+消息合并表)';

设计亮点: 会话元信息与消息内容合并在一张表,通过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`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

八、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 connections

9.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简历表
http://www.jsqmd.com/news/1149933/

相关文章:

  • 3款地震速度模型可视化工具对比:SU vs Madagascar vs Python 性能与效果实测
  • Burp Suite 2024.5 代理抓包实战:5步复现Web登录请求拦截与参数分析
  • 2026最新5款AI编程平替工具vibe coding深度实测
  • TS2007FC与PIC18F45K80在嵌入式音频系统的高效应用
  • PHP 文件包含漏洞实战:iwebsec 靶场 10 关核心利用手法与 3 类伪协议解析
  • Nacos <=2.2.0 JWT 默认密钥漏洞复现:3步构造有效Token接管后台
  • Burp Suite Turbo Intruder 并发测试:3个真实SRC案例复现与脚本分析
  • 软件License设计5大安全挑战:从虚拟机/Docker逃逸到Agent模拟攻击
  • Upload-Labs Pass-02/03 实战:Content-Type与黑名单绕过,2种方法成功率100%
  • NetBackup 10.1 外部CA配置后登录失败:5步排查与证书存储修复
  • Hutool-crypto 5.8.10 密钥管理:从内存硬编码到配置文件安全的3步演进
  • WebDAV 方法实战检测:OPTIONS/PUT/DELETE 等 8 种方法自动化探测与利用
  • Burp Suite 2024.6 与 5款开源插件对比评测:漏洞检出率提升40%实测
  • AOPR 7.21 实战:3种攻击模式破解Office 2019文档,成功率提升80%
  • 多模态Transformer实战:CLIP与BLIP-2模型在图文检索中的3种融合策略对比
  • C语言数组越界漏洞:从缓冲区溢出到密码验证绕过实战分析
  • 业务逻辑漏洞防御指南:基于墨者学院6个靶场案例的3层防护策略
  • 微信消息自动转发终极指南:3步实现跨群信息同步
  • 高校教务系统安全审计实战:基于新正方 8.0 的 5 个常见越权测试点与修复验证
  • Fastjson 1.2.83 安全升级实战:修复 CVE-2022-25845 的 3 种方法与兼容性验证
  • 如何高效遍历数值列表,筛选满足阈值条件的元素
  • XXE漏洞防御:PHP/Java/Python 3种语言5行代码修复方案对比
  • Office文档密码恢复工具对比:AOPR 7.21 vs Passper 4.0 功能与性能实测
  • 宝塔面板 7.9.8 目录权限与安全加固:10个关键目录的权限设置指南
  • iwebsec靶场 XXE漏洞实战:3种外部实体利用方式与Burp Collaborator盲注
  • AppScan 扫描 X-Content-Type-Options 缺失:5步修复与误报排查指南
  • CVE-2019-15107 漏洞深度剖析:Webmin密码重置功能中的1处命令注入逻辑缺陷
  • 如何快速解锁加密音乐:3个实用技巧与完整解密指南
  • D3KeyHelper:基于事件驱动架构的暗黑破坏神3智能按键调度系统
  • vCenter Server 6.7 U1+ 密码安全:2步SSH重置与90天过期策略管理