跳转到主要内容

Database Architecture

概述

Zeus 采用分层的数据库架构,将数据库操作从业务逻辑中分离,实现清晰的职责划分。

架构概览

层级职责

1. Schema 层

定义表结构和关系,使用 Drizzle ORM 的声明式语法定义数据库表、字段类型、约束和外键关系。

2. Model 层

封装单表 CRUD 操作,提供 findByIdfindByUserIdcreateupdatedelete 等标准方法,每个 Model 对应一张数据库表。

3. Service 层

处理业务逻辑,包括跨模型的事务处理和协调操作。例如创建会话时同时添加第一条消息、删除会话时级联删除所有消息等。

4. API Route 层

处理 HTTP 请求,负责权限检查、参数校验、调用 Service 层和返回响应。API Route 不直接操作数据库。

Drizzle ORM

概述

Zeus 使用 Drizzle ORM 与 PostgreSQL 进行类型安全的数据库操作。

数据库表

系统主要包含以下数据库表: 认证相关表:
  • user - 用户信息(id, name, email, emailVerified, image 等)
  • session - 用户会话(关联 user,包含 token 和过期时间)
  • account - OAuth 账户(关联 user,存储第三方登录信息)
聊天相关表:
  • chat_session - 聊天会话(关联 user 和 project)
  • message - 消息记录(关联 chat_session,包含角色、内容和工具调用信息)
MCP 相关表:
  • mcp_server - MCP 服务器配置(关联 user,包含 tools 和 prompts)

类型安全

Drizzle 通过 InferSelectModelInferInsertModel 自动从 Schema 定义生成 TypeScript 类型,确保查询和插入操作的类型安全。

最佳实践

1. 使用连接池

配置数据库连接池(推荐 max: 20),设置合理的超时参数以优化性能。

2. 添加索引

在频繁查询的字段上添加索引,例如 userIdprojectId 等外键字段。

3. 使用事务

对于需要原子性的多步操作,使用 db.transaction() 确保数据一致性。

4. 批量操作

优先使用批量插入和 IN 查询,避免循环单条操作。