你应该使用 Prisma ORM 吗?
Prisma ORM 是一种新型 ORM,与其他任何工具一样,它也有自己的权衡。本页解释了何时 Prisma ORM 是一个不错的选择,并为其他场景提供了替代方案。
如果您符合以下情况,Prisma ORM 可能 非常 适合您...
... 您正在构建一个与数据库通信的服务器端应用程序
这是 Prisma ORM 的主要用例。服务器端应用程序通常是 API 服务器,通过 REST、GraphQL 或 gRPC 等技术暴露数据操作。它们通常构建为微服务或单体应用程序,并通过长时间运行的服务器或无服务器函数进行部署。Prisma ORM 非常适合所有这些应用程序和部署模型。
请参阅 Prisma ORM 支持 的数据库(关系型、NoSQL 和 NewSQL)完整列表。
... 您关心生产力和开发者体验
生产力和开发者体验是我们构建工具的核心。我们致力于为手动执行时复杂、容易出错且耗时的任务构建开发者友好的抽象。
无论您是 SQL 新手还是经验丰富的开发者,Prisma ORM 都能在最常见的数据库工作流程中显著提升您的生产力。
以下是我们设计和构建工具时遵循的一些指导原则和通用实践
- 让正确的事情变得容易
- 易于成功
- 在可能的情况下提供智能自动完成
- 构建强大的编辑器扩展(例如针对 VS Code)
- 加倍努力实现完全的类型安全
... 您正在团队中工作
Prisma ORM 在协作环境中尤为出色。
声明式 Prisma schema 提供了数据库当前状态的概览,易于所有人理解。与传统工作流程相比,这是一个重大改进,传统工作流程中开发者必须翻阅迁移文件来理解当前的表结构。
Prisma Client 简洁的 API 表面使开发者能够快速上手,无需大量学习成本,因此将新开发者加入团队变得更加顺畅。
Prisma Migrate 工作流程旨在涵盖协作环境中的数据库 schema 变更。从最初的 schema 创建到将 schema 变更部署到生产环境以及解决并行修改引入的冲突,Prisma Migrate 都能为您提供支持。
... 您想要一个全面涵盖您的数据库工作流程的工具
Prisma ORM 不仅仅是“又一个 ORM”。我们正在构建一个数据库工具包,涵盖与数据库交互的应用程序开发者的日常工作流程。例如:
- 查询(使用 Prisma Client)
- 数据建模(在 Prisma schema 中)
- 迁移(使用 Prisma Migrate)
- 快速原型开发(通过
prisma db push
) - 填充数据(通过
prisma db seed
) - 可视化查看和编辑(使用 Prisma Studio)
... 您看重类型安全
Prisma ORM 是 TypeScript 生态系统中唯一 完全 类型安全的 ORM。生成的 Prisma Client 确保即使是部分查询和关联也能获得类型化的查询结果。您可以在与 TypeORM 的类型安全比较中了解更多信息。
... 您想编写原生、类型安全的 SQL
除了直观的高级查询 API,Prisma ORM 还提供了一种方式,让您可以编写完全类型安全的原生 SQL。
... 您想要一个开发过程透明、维护和支持得当的 ORM
Prisma ORM 开源工具的开发是公开进行的。大部分工作直接在 GitHub 的主仓库 prisma/prisma
中进行
- 我们仓库中的 issues 和 PR 会被分流和确定优先级(通常在 1-2 天内)
- 每三周发布新的 版本,包含新功能和改进
- 我们有一个专门的支持团队,会在 GitHub Discussions 中回复问题。
... 您想成为一个很棒社区的一部分
Prisma 有一个活跃的社区,您可以在 Discord 上找到它。我们还定期举办 Meetups、会议和其他以开发者为中心的活动。加入我们吧!
如果您符合以下情况,Prisma ORM 可能 不 适合您...
... 您需要对所有数据库查询拥有 完全 控制权
Prisma ORM 是一种抽象。因此,Prisma ORM 固有的权衡是控制量减少,以换取更高的生产力。这意味着,在某些场景下,Prisma Client API 的功能可能不如使用原生 SQL。
如果您的应用程序对数据库查询有 Prisma ORM 不提供且 workaround 成本过高的要求,那么使用允许您通过原生 SQL 完全控制数据库操作的工具可能更适合您。
注意:如果您可以绕过某个限制,但仍然希望看到 Prisma ORM 处理该情况的方式得到改进,我们鼓励您在 GitHub 上创建一个功能请求,以便我们的产品和工程团队进行研究。
替代方案:SQL 驱动程序(例如 node-postgres
、mysql
、sqlite3
等)
... 您不想为您的后端编写任何代码
如果您不想为您的后端编写任何代码,只需能够开箱即用地生成 API 服务器和数据库,您可能更愿意为您的项目选择 后端即服务 (BaaS)。
使用 BaaS,您通常可以通过高级 API(例如 GraphQL SDL)或可视化编辑器配置您的数据模型。基于此数据模型,BaaS 会为您生成一个 CRUD API 并提供数据库。在此设置下,您通常无法控制 API 服务器和数据库运行的基础设施。
使用 Prisma ORM,您需要使用 Node.js 或 TypeScript 自己构建后端。这意味着与使用 BaaS 相比,您需要进行更多编码工作。这种方法的好处是您在构建、部署、扩展和维护后端方面拥有完全的灵活性,并且您的技术栈的关键部分不依赖于第三方软件。
替代方案:AWS AppSync、8base、Nhost、Supabase、Firebase、Amplication
... 您想在不编写任何代码的情况下获得一个 CRUD GraphQL API
虽然像 nexus-plugin-prisma
和 typegraphql-prisma
等工具允许您快速为 Prisma ORM 模型在 GraphQL API 中生成 CRUD 操作,但这些方法仍然需要您手动设置 GraphQL 服务器,并做一些工作来暴露 Prisma schema 中定义的模型的 GraphQL 查询和变更。
如果您想开箱即用地为您的数据库获取一个 GraphQL 端点,其他工具可能更适合您的用例。
替代方案:Hasura、Postgraphile