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

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 完善

后果

正面影响

  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 有轻微开销(但通常可接受)

相关链接