您应该使用 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 工作流的设计旨在涵盖协作环境中的数据库模式更改。从最初的模式创建到将模式更改部署到生产环境以及解决由并行修改引入的冲突,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 上找到。我们还定期举办 Meetup、会议和其他以开发者为中心的活动。加入我们吧!
如果以下情况,Prisma ORM 很可能不适合您...
... 您需要对所有数据库查询有完全控制
Prisma ORM 是一种抽象层。因此,Prisma ORM 的一个固有权衡是,以牺牲部分控制为代价换取更高的生产力。这意味着,在某些情况下,Prisma Client API 的功能可能不如纯 SQL。
如果您的应用程序对数据库查询有 Prisma ORM 无法满足的要求,且变通方案成本过高,那么使用允许您通过纯 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
等工具允许您在 GraphQL API 中快速为 Prisma ORM 模型生成 CRUD 操作,但这些方法仍需要您手动设置 GraphQL 服务器,并做一些工作来公开 Prisma schema 中定义的模型的 GraphQL 查询和变异。
如果您想开箱即用地为数据库获取 GraphQL 端点,其他工具可能更适合您的用例。
替代方案:Hasura、Postgraphile