你应该使用 Prisma ORM 吗?
Prisma ORM 是一种新型的 ORM,就像任何其他工具一样,它有自己的权衡。本页解释了 Prisma ORM 在哪些情况下适合使用,并提供了其他情况下的替代方案。
如果你...,那么 Prisma ORM 很可能适合你
...你正在构建一个与数据库通信的服务器端应用程序
这是 Prisma ORM 的主要用例。服务器端应用程序通常是通过 REST、GraphQL 或 gRPC 等技术公开数据操作的 API 服务器。它们通常被构建为微服务或单体应用程序,并通过长时间运行的服务器或无服务器函数进行部署。Prisma ORM 非常适合所有这些应用程序和部署模型。
参考 Prisma ORM 支持的数据库完整列表(关系型、NoSQL 和 NewSQL)。
...你关心生产力和开发人员体验
生产力和开发人员体验是我们构建工具的核心。我们旨在为手动执行时复杂、易出错且耗时的任务构建开发者友好的抽象。
无论你是 SQL 新手还是老手,Prisma ORM 都能为最常见的数据操作工作流程带来显著的生产力提升。
以下是我们设计和构建工具时遵循的一些指导原则和一般做法
- 使正确的事情变得容易
- 成功之坑
- 尽可能提供智能自动完成
- 构建强大的编辑器扩展(例如,用于 VS Code)
- 竭尽全力实现完全的类型安全
...你正在团队中工作
Prisma ORM 在协作环境中尤其出色。
声明式 Prisma 模式 提供了数据库当前状态的概述,每个人都能轻松理解。这对于传统的开发流程来说是一个重大改进,在传统的流程中,开发人员必须深入挖掘迁移文件才能了解当前的表结构。
Prisma 客户端 的最小 API 表面使开发人员能够快速上手,无需太多学习成本,从而使新开发人员更轻松地加入团队。
Prisma Migrate 工作流程的设计方式旨在涵盖协作环境中的数据库模式变更。从初始模式创建到将模式变更部署到生产环境,再到解决并行修改引入的冲突,Prisma Migrate 都能满足你的需求。
...你想要一个能够全面覆盖数据库工作流程的工具
Prisma ORM 不仅仅是“另一个 ORM”。我们正在构建一个数据库工具包,它涵盖了与数据库交互的应用程序开发人员的日常工作流程。以下是一些示例
- 查询(使用 Prisma 客户端)
- 数据建模(在 Prisma 模式 中)
- 迁移(使用 Prisma Migrate)
- 原型设计(通过
prisma db push
) - 播种(通过
prisma db seed
) - 可视化查看和编辑(使用 Prisma Studio)
...你重视类型安全
Prisma ORM 是 TypeScript 生态系统中唯一一个完全类型安全的 ORM。生成的 Prisma 客户端确保即使对于部分查询和关系,也会返回类型化的查询结果。你可以在 与 TypeORM 的类型安全比较 中了解更多信息。
...你想要编写原始的、类型安全的 SQL
除了直观的、更高层次的查询 API 之外,Prisma ORM 还提供了一种方法,可以让你编写完全类型安全的原始 SQL。
...你想要一个具有透明开发流程、完善维护和支持的 ORM
Prisma ORM 的开源工具的开发是在公开环境下进行的。大部分工作直接在 GitHub 的主要 prisma/prisma
存储库中进行
- 我们存储库中的问题和 PR 通常会在 1-2 天内进行分类和优先级排序
- 每三周发布一次包含新功能和改进的 新版本
- 我们有一个专门的支持团队,负责在 GitHub Discussions 中回复问题
...你想要加入一个很棒的社区
Prisma 有一个充满活力的 社区,你可以在 Discord 上找到我们。我们还定期举办聚会、会议和其他面向开发者的活动。加入我们!
如果你...,那么 Prisma ORM 很可能不适合你
...你需要完全控制所有数据库查询
Prisma ORM 是一个抽象层。因此,Prisma ORM 的一个固有权衡是在提高生产力的同时降低控制程度。这意味着,Prisma 客户端 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 模式中定义的模型的 GraphQL 查询和变异。
如果您希望开箱即用地为您的数据库获取 GraphQL 端点,其他工具可能更适合您的用例。
替代方案:Hasura、Postgraphile