# 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)