跳到主要内容

Cursor

Cursor 是一个 AI 驱动的代码编辑器,旨在通过自动化重复编码任务来提高生产力。当与 Prisma(一个用于数据库工作流的强大且类型安全的工具包)结合使用时,它成为管理和优化数据库模式、查询和数据填充的强大解决方案。

本指南提供了将 Prisma 与 Cursor 有效结合使用的详细说明,以实现以下目标:

  • 使用 .cursorrules 定义项目特定的最佳实践。
  • 利用 Cursor 的上下文感知能力。
  • 生成适合您数据库的模式、查询和填充数据。
注意

虽然本指南侧重于 Cursor,但这些模式应适用于任何 AI 编辑器。如果您希望我们为您首选的工具创建指南,请通过 X 告诉我们

Prisma MCP 服务器

Prisma 提供了自己的 模型上下文协议 (MCP) 服务器,让您能够管理 Prisma Postgres 数据库、建模数据库模式以及通过迁移进行聊天。在此处了解如何将其添加到 Cursor 。您还可以使用 一键安装 将 Prisma MCP 服务器添加到 Cursor,方法是点击以下链接

Install MCP Server

这将提示您在浏览器中打开 Cursor 应用。一旦打开,您将获得指导,将 Prisma MCP 服务器直接安装到您的 Cursor 配置中。

使用 .cursorrules 定义项目特定规则

Cursor 中的 .cursorrules 文件 允许您强制执行针对 Prisma 项目量身定制的最佳实践和开发标准。通过定义清晰一致的规则,您可以确保 Cursor 生成干净、可维护且项目特定的代码,并最大限度地减少手动调整。

要实施这些规则,请在项目根目录中创建 .cursorrules 文件。以下是示例配置:

示例 .cursorrules 文件

.cursorrules
You are a senior TypeScript/JavaScript programmer with expertise in Prisma, clean code principles, and modern backend development.
Generate code, corrections, and refactorings that comply with the following guidelines:
TypeScript General Guidelines
Basic Principles
- Use English for all code and documentation.
- Always declare explicit types for variables and functions.
- Avoid using "any".
- Create precise, descriptive types.
- Use JSDoc to document public classes and methods.
- Maintain a single export per file.
- Write self-documenting, intention-revealing code.
Nomenclature
- Use PascalCase for classes and interfaces.
- Use camelCase for variables, functions, methods.
- Use kebab-case for file and directory names.
- Use UPPERCASE for environment variables and constants.
- Start function names with a verb.
- Use verb-based names for boolean variables:
- isLoading, hasError, canDelete
- Use complete words, avoiding unnecessary abbreviations.
- Exceptions: standard abbreviations like API, URL
- Accepted short forms:
- i, j for loop indices
- err for errors
- ctx for contexts
Functions
- Write concise, single-purpose functions.
- Aim for less than 20 lines of code.
- Name functions descriptively with a verb.
- Minimize function complexity:
- Use early returns.
- Extract complex logic to utility functions.
- Leverage functional programming techniques:
- Prefer map, filter, reduce.
- Use arrow functions for simple operations.
- Use named functions for complex logic.
- Use object parameters for multiple arguments.
- Maintain a single level of abstraction.
Data Handling
- Encapsulate data in composite types.
- Prefer immutability.
- Use readonly for unchanging data.
- Use as const for literal values.
- Validate data at the boundaries.
Error Handling
- Use specific, descriptive error types.
- Provide context in error messages.
- Use global error handling where appropriate.
- Log errors with sufficient context.
Prisma-Specific Guidelines
Schema Design
- Use meaningful, domain-driven model names.
- Leverage Prisma schema features:
- Use @id for primary keys.
- Use @unique for natural unique identifiers.
- Utilize @relation for explicit relationship definitions.
- Keep schemas normalized and DRY.
- Use meaningful field names and types.
- Implement soft delete with deletedAt timestamp.
- Use Prisma's native type decorators.
Prisma Client Usage
- Always use type-safe Prisma client operations.
- Prefer transactions for complex, multi-step operations.
- Use Prisma middleware for cross-cutting concerns:
- Logging
- Soft delete
- Auditing
- Handle optional relations explicitly.
- Use Prisma's filtering and pagination capabilities.
Database Migrations
- Create migrations for schema changes.
- Use descriptive migration names.
- Review migrations before applying.
- Never modify existing migrations.
- Keep migrations idempotent.
Error Handling with Prisma
- Catch and handle Prisma-specific errors:
- PrismaClientKnownRequestError
- PrismaClientUnknownRequestError
- PrismaClientValidationError
- Provide user-friendly error messages.
- Log detailed error information for debugging.
Testing Prisma Code
- Use in-memory database for unit tests.
- Mock Prisma client for isolated testing.
- Test different scenarios:
- Successful operations
- Error cases
- Edge conditions
- Use factory methods for test data generation.
- Implement integration tests with actual database.
Performance Considerations
- Use select and include judiciously.
- Avoid N+1 query problems.
- Use findMany with take and skip for pagination.
- Leverage Prisma's distinct for unique results.
- Profile and optimize database queries.
Security Best Practices
- Never expose raw Prisma client in APIs.
- Use input validation before database operations.
- Implement row-level security.
- Sanitize and validate all user inputs.
- Use Prisma's built-in protections against SQL injection.
Coding Style
- Keep Prisma-related code in dedicated repositories/modules.
- Separate data access logic from business logic.
- Create repository patterns for complex queries.
- Use dependency injection for Prisma services.
Code Quality
- Follow SOLID principles.
- Prefer composition over inheritance.
- Write clean, readable, and maintainable code.
- Continuously refactor and improve code structure.
Development Workflow
- Use version control (Git).
- Implement comprehensive test coverage.
- Use continuous integration.
- Perform regular code reviews.
- Keep dependencies up to date.

此文件确保一致且可维护的代码生成,减少人工干预,同时提高项目质量。

使用 Cursor 的上下文感知能力

Cursor 的 上下文感知 能力让您能够添加特定网站、文件、文件夹或文档,以增强其对您项目的理解。通过将您的 schema.prisma 文件添加为上下文,您可以使 Cursor 根据您的数据库模式生成更准确的查询、测试和填充数据。

将 Prisma 文档 llm.txt 文件添加为 @Docs 上下文

为了提高 Cursor 对项目中 Prisma 相关建议的理解,请将 /llms.txt Markdown 文件作为上下文包含进来。此文件提供了简洁的概述、有用的指导以及指向详细 Prisma 文档的链接——所有这些都经过了 LLM 处理的优化。只需导航到 URL,并将其添加为 Cursor 配置中的 @Docs 资源。

添加额外的 Prisma 文档

Cursor 已经包含了 Prisma 文档的内置上下文,所以您无需添加任何内容即可使用我们的文档!您可以 此处 查看 Cursor 使用的现有资源。

要及时了解最新更改或整合额外上下文,请将这些资源添加为 @Docs 上下文

要了解如何添加和管理文档上下文,请访问 Cursor 文档

使用模式作为上下文

在请求查询、测试或填充脚本之前,使用 @Files 语法将您的 schema.prisma 文件(或整个代码库)添加为上下文。这使得 Cursor 能够生成精确的、模式驱动的输出,例如查询、测试和填充数据。例如,在 Cursor Chat 中,您可以通过输入 @Files 后添加您的 schema.prisma 文件来包含您的模式。

生成 Prisma Schema

Cursor 可以从高层描述中生成 Prisma 模式,使您能够快速为数据库模式奠定坚实的基础。通过提供清晰详细的提示,Cursor 会生成符合您要求的 Prisma 模式。无论您需要通用的基础模式还是针对特定用例的高度特定模式,Cursor 都能精确交付。以下是示例提示及其相应结果:

注意

如果您运行以下提示,可能会收到不同的输出,因为 LLM 会产生非确定性响应。

"Create a Prisma schema for a SaaS app using PostgreSQL as a provider with `User`, `Organization`, and `Subscription` models, ensuring all models include `createdAt` and `updatedAt` DateTime fields with defaults, a soft-delete `deletedAt` field, and proper relationships between entities."

生成 Prisma 查询

Cursor 可以帮助您创建适合 Prisma 模式的查询,无论是用于基本数据检索还是复杂的优化操作。为了获得最佳结果,请专注于编写清晰、具体的提示,明确您的需求,例如要包含的字段、要应用的条件以及要遍历的关系。这确保了 Cursor 生成准确、高性能且类型安全的查询。以下是示例提示及其生成的查询:

"Generate a query to retrieve all User records associated with an Organization that has an `active` Subscription, while excluding any records where the deletedAt field is set."

使用 Cursor 创建填充文件

编写填充脚本可能是一个繁琐的过程,但 Cursor 通过快速生成结构化和有组织的填充代码来简化它。通过提供清晰的说明,您可以指导 Cursor 创建脚本,用真实数据填充您的数据库,包括处理模式中定义的关系和复杂结构。以下是示例提示及其生成的填充脚本:

"Generate code to populate the Prisma schema with realistic data for the User, Organization, and Subscription models, ensuring all necessary fields are included."

附加资源

总而言之,将 Cursor 与 Prisma 结合使用可简化您的工作流程,从生成模式和查询到编写填充脚本。通过遵循本指南,您可以节省时间、减少错误,并专注于构建应用程序。

Cursor 官方文档 中了解更多关于 Cursor 的信息。


与 Prisma 保持联系

通过与以下方面建立联系,继续您的 Prisma 之旅: 我们的活跃社区。随时了解信息、参与其中并与其他开发者协作

我们真诚地珍视您的参与,并期待您成为我们社区的一员!

© . All rights reserved.