跳到主要内容

你应该使用 Prisma ORM 吗?

Prisma ORM 是一种新型 ORM,与其他任何工具一样,它也有自己的权衡。本页解释了何时 Prisma ORM 是一个不错的选择,并为其他场景提供了替代方案。

如果您符合以下情况,Prisma ORM 可能 非常 适合您...

... 您正在构建一个与数据库通信的服务器端应用程序

这是 Prisma ORM 的主要用例。服务器端应用程序通常是 API 服务器,通过 REST、GraphQL 或 gRPC 等技术暴露数据操作。它们通常构建为微服务或单体应用程序,并通过长时间运行的服务器或无服务器函数进行部署。Prisma ORM 非常适合所有这些应用程序和部署模型。

请参阅 Prisma ORM 支持 的数据库(关系型、NoSQL 和 NewSQL)完整列表。

... 您关心生产力和开发者体验

生产力和开发者体验是我们构建工具的核心。我们致力于为手动执行时复杂、容易出错且耗时的任务构建开发者友好的抽象。

无论您是 SQL 新手还是经验丰富的开发者,Prisma ORM 都能在最常见的数据库工作流程中显著提升您的生产力。

以下是我们设计和构建工具时遵循的一些指导原则和通用实践

... 您正在团队中工作

Prisma ORM 在协作环境中尤为出色。

声明式 Prisma schema 提供了数据库当前状态的概览,易于所有人理解。与传统工作流程相比,这是一个重大改进,传统工作流程中开发者必须翻阅迁移文件来理解当前的表结构。

Prisma Client 简洁的 API 表面使开发者能够快速上手,无需大量学习成本,因此将新开发者加入团队变得更加顺畅。

Prisma Migrate 工作流程旨在涵盖协作环境中的数据库 schema 变更。从最初的 schema 创建到将 schema 变更部署到生产环境以及解决并行修改引入的冲突,Prisma Migrate 都能为您提供支持。

... 您想要一个全面涵盖您的数据库工作流程的工具

Prisma ORM 不仅仅是“又一个 ORM”。我们正在构建一个数据库工具包,涵盖与数据库交互的应用程序开发者的日常工作流程。例如:

... 您看重类型安全

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-postgresmysqlsqlite3 等)

... 您不想为您的后端编写任何代码

如果您不想为您的后端编写任何代码,只需能够开箱即用地生成 API 服务器和数据库,您可能更愿意为您的项目选择 后端即服务 (BaaS)。

使用 BaaS,您通常可以通过高级 API(例如 GraphQL SDL)或可视化编辑器配置您的数据模型。基于此数据模型,BaaS 会为您生成一个 CRUD API 并提供数据库。在此设置下,您通常无法控制 API 服务器和数据库运行的基础设施。

使用 Prisma ORM,您需要使用 Node.js 或 TypeScript 自己构建后端。这意味着与使用 BaaS 相比,您需要进行更多编码工作。这种方法的好处是您在构建、部署、扩展和维护后端方面拥有完全的灵活性,并且您的技术栈的关键部分不依赖于第三方软件。

替代方案AWS AppSync8baseNhostSupabaseFirebaseAmplication

... 您想在不编写任何代码的情况下获得一个 CRUD GraphQL API

虽然像 nexus-plugin-prismatypegraphql-prisma 等工具允许您快速为 Prisma ORM 模型在 GraphQL API 中生成 CRUD 操作,但这些方法仍然需要您手动设置 GraphQL 服务器,并做一些工作来暴露 Prisma schema 中定义的模型的 GraphQL 查询和变更。

如果您想开箱即用地为您的数据库获取一个 GraphQL 端点,其他工具可能更适合您的用例。

替代方案HasuraPostgraphile