10 Go Eino AI应用开发实战 | 数据库架构设计

64 阅读4分钟

声明:本AI应用开发系列教程首发在同名公众号:王中阳,未经授权禁止转载。

Go-Eino 面试 Agent 平台采用结构良好的关系数据库模式,使用 GORM 作为 ORM 框架。该设计遵循以用户为中心的方法,在不同功能域之间实现明确的关注点分离。

核心实体关系

image.png

用户管理模式

user 表作为系统的核心实体,支持传统身份验证和微信集成:user.go

核心功能:

  • 双重身份验证:支持用户名/邮箱登录以及微信 OpenID/UnionID 集成
  • 基于角色的访问控制:实现基于角色的权限管理,默认角色为 'user'
  • 软删除:利用 GORM 的 DeletedAt 进行逻辑删除
  • 唯一约束:对用户名、邮箱和微信标识符强制唯一性

索引策略:

  • id 上的主键
  • usernameemailwechat_open_idwechat_union_id 上的唯一索引
  • 用于高效身份验证查询的复合索引

简历管理系统

resume 表处理用户文档存储,具备版本控制功能:resume.go

存储架构:

  • 内容存储:使用 longtext 实现灵活的文档内容存储
  • 元数据跟踪:维护文件信息(名称、大小、类型)以便正确处理
  • 默认选择:实现 is_default 标志用于主简历标识
  • 软删除:使用 deleted 标志进行逻辑删除并保留数据

查询优化:

  • 为 user_id 建立索引以高效检索用户特定简历
  • 为 deleted 建立索引以过滤活跃记录
  • 为 is_default 建立索引以优化主简历查找

面试会话管理

面试系统采用多表方法进行全面会话跟踪:

面试记录表

interview_record.go 存储会话元数据:

会话属性:

  • 分类:类型、难度和领域分类
  • 上下文:公司和职位信息用于定向面试
  • 生命周期:状态跟踪(待定/已完成)及持续时间测量
  • 时间:自动时间戳管理用于审计跟踪

面试对话表

interview_dialogue.go 捕获对话流:

对话存储:

  • 顺序存储:按时间顺序维护问答对
  • 用户关联:将对话链接到特定用户和面试会话
  • 文本内容:使用 text 类型支持无限内容长度
  • 复合索引:针对用户+报告查询进行优化

面试评估系统

interview_evaluation.go 实现多维度评估:

评估架构:

  • JSON 序列化:使用 GORM 的 JSON 序列化器存储复杂的维度数据
  • 可扩展维度:灵活的 EvaluationDimension 结构支持多种评估标准
  • 精确评分:使用 decimal(5,2) 实现准确的分数表示
  • 软删除:通过逻辑删除维护评估历史

答案报告系统

answer_report.go 提供详细的答案分析:

报告结构:

  • 分层数据:用于复杂答案记录的嵌套 JSON 结构
  • 全面反馈:包括优势、劣势和建议的多方面评估
  • 消息历史:在答案上下文中完整保存对话
  • 模块化评论:用于详细答案分析的结构化评论系统

预测系统模式

预测功能实现题库系统:prediction.go

题目管理:

  • 记录组织:预测记录对相关题目进行分组
  • 题目元数据:跟踪题目顺序和内容
  • 用户关联:将预测链接到用户账户
  • 可扩展设计:支持批量题目创建和检索

数据库设计模式

索引策略

模式采用策略性索引优化性能:

主索引次索引目的
useridusername, email, wechat_open_id, wechat_union_id身份验证和查找
resumeiduser_id, deleted用户查询和过滤
interview_recordiduser_id会话检索
interview_dialogueiduser_id, report_id对话查询
interview_evaluationiduser_id, report_id, deleted评估查找
answer_reportiduser_id, report_id, deleted报告访问

数据类型优化

  • 文本存储:使用 longtext 存储可变长度内容(简历、答案)
  • 精确数字:采用 decimal(5,2) 实现准确评分
  • 时间戳处理:为 created/updated 字段自动处理毫秒精度
  • 布尔标志:使用整数表示状态和删除标志

软删除实现

多个表实现逻辑删除:

  • GORM 集成:利用 gorm.DeletedAt 自动软删除
  • 自定义标志:在 GORM 软删除不适用的场景使用整数 deleted 标志
  • 查询过滤:在标准查询中自动排除已删除记录

事务管理

系统包含事务支持以确保数据一致性:transaction.go 为涉及多表的复杂操作提供事务工具,确保相关数据修改的 ACID 属性。

模式设计通过策略性索引优先考虑查询性能,同时通过外键关系和软删除模式维护数据完整性。这种方法在可扩展性与数据保留需求之间取得平衡。

对复杂嵌套结构(评估、答案报告)使用 JSON 序列化,既提供了灵活性,又保持了关系数据库在核心实体关系和索引方面的优势。

一起进步

欢迎关注我,如果你也对Ai应用开发感兴趣,可以再掘金私信我。