1.8 KiB
1.8 KiB
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 完善
后果
正面影响
- 类型安全: 自动生成完整的 TypeScript 类型
- Schema 优先: 直观的 DSL 定义数据模型
- 迁移工具: 强大的数据库版本管理
- 开发体验: Prisma Studio 可视化管理
- 多数据库: 支持 PostgreSQL, MySQL, SQL Server 等
- Prisma Client: 类型安全的查询构建器
负面影响
- 锁定效应: 深度依赖 Prisma 生态
- 查询灵活性: 复杂查询可能需要退回到 raw SQL
- 学习曲线: Prisma 概念需要学习
- 性能: 相比原生 SQL 有轻微开销(但通常可接受)