86 lines
1.8 KiB
Markdown
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)
|