Database Architecture
概述
Zeus 采用分层的数据库架构,将数据库操作从业务逻辑中分离,实现清晰的职责划分。架构概览
层级职责
1. Schema 层
定义表结构和关系,使用 Drizzle ORM 的声明式语法定义数据库表、字段类型、约束和外键关系。2. Model 层
封装单表 CRUD 操作,提供findById、findByUserId、create、update、delete 等标准方法,每个 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_server- MCP 服务器配置(关联 user,包含 tools 和 prompts)
类型安全
Drizzle 通过InferSelectModel 和 InferInsertModel 自动从 Schema 定义生成 TypeScript 类型,确保查询和插入操作的类型安全。
最佳实践
1. 使用连接池
配置数据库连接池(推荐 max: 20),设置合理的超时参数以优化性能。2. 添加索引
在频繁查询的字段上添加索引,例如userId、projectId 等外键字段。
3. 使用事务
对于需要原子性的多步操作,使用db.transaction() 确保数据一致性。
4. 批量操作
优先使用批量插入和IN 查询,避免循环单条操作。