是否应该使用 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 模式提供了数据库当前状态的概述,每个人都易于理解。与传统的开发流程相比,这是一个重大改进,在传统流程中,开发人员必须深入研究迁移文件才能了解当前的表结构。
Prisma Client 的最小 API 表面积使开发人员能够快速上手,而无需太多学习成本,因此为团队引入新开发人员变得更加顺畅。
Prisma Migrate 工作流程旨在涵盖协作环境中的数据库模式更改。从初始模式创建到将模式更改部署到生产环境,以及解决并行修改引入的冲突,Prisma Migrate 都能满足您的需求。
... 您希望使用一种全面涵盖数据库工作流程的工具
Prisma ORM 不仅仅是“另一个 ORM”。我们正在构建一个数据库工具包,涵盖与数据库交互的应用程序开发人员的日常工作流程。以下是一些示例
- 查询(使用 Prisma Client)
- 数据建模(在 Prisma 模式中)
- 迁移(使用 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
存储库中进行
- 我们存储库中的问题和 PR 会被分类和优先处理(通常在 1-2 天内)
- 每三周发布一次具有新功能和改进的新 版本
- 我们有一个专门的支持团队,会在 GitHub Discussions 中回复问题
... 您希望成为一个很棒的社区的一份子
Prisma 拥有一个活跃的 社区,您可以在 Discord 上找到我们。我们还会定期举办聚会、会议和其他以开发人员为中心的活动。加入我们!
如果您符合以下条件,则 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 模式中定义的模型的 GraphQL 查询和变异。
如果您希望开箱即用地获得数据库的 GraphQL 端点,其他工具可能更适合您的用例。
替代方案:Hasura、Postgraphile