fischerX/docs/architecture/design-decisions/0004-prisma-orm.md

86 lines
1.8 KiB
Markdown

# ADR-0004: Prisma ORM
| 状态 | 接受 |
|-----|------|
| 创建日期 | 2026-05-25 |
| 作者 | 技术团队 |
## 上下文
我们需要选择一个 ORM (对象关系映射) 工具来处理数据库操作。需求包括:
- TypeScript 类型安全
- 直观的数据模型定义
- 强大的迁移工具
- 多数据库支持
- 良好的开发体验
## 决策
我们决定使用 **Prisma 6+** 作为 ORM 工具,配合:
- **Prisma Schema**: 数据模型定义
- **Prisma Client**: 类型安全的数据库访问
- **Prisma Migrate**: 数据库迁移
- **Prisma Studio**: 数据库 GUI
## 备选方案
### 方案 1: TypeORM
**优点**:
- 成熟稳定
- 装饰器模式
- 丰富的特性
**缺点**:
- 类型安全不如 Prisma
- 查询构建器较复杂
- 迁移系统较弱
- 性能一般
### 方案 2: Sequelize
**优点**:
- 社区大
- 文档丰富
- 支持多数据库
**缺点**:
- TypeScript 支持有限
- API 设计过时
- 查询体验不佳
### 方案 3: Drizzle ORM
**优点**:
- 极轻量
- 优秀的 TypeScript 支持
- 性能好
- 类似 SQL 的查询
**缺点**:
- 相对较新
- 生态较小
- 迁移工具不如 Prisma 完善
## 后果
### 正面影响
1. **类型安全**: 自动生成完整的 TypeScript 类型
2. **Schema 优先**: 直观的 DSL 定义数据模型
3. **迁移工具**: 强大的数据库版本管理
4. **开发体验**: Prisma Studio 可视化管理
5. **多数据库**: 支持 PostgreSQL, MySQL, SQL Server 等
6. **Prisma Client**: 类型安全的查询构建器
### 负面影响
1. **锁定效应**: 深度依赖 Prisma 生态
2. **查询灵活性**: 复杂查询可能需要退回到 raw SQL
3. **学习曲线**: Prisma 概念需要学习
4. **性能**: 相比原生 SQL 有轻微开销(但通常可接受)
## 相关链接
- [Prisma 文档](https://www.prisma.io/docs)