Pular para o conteúdo principal

Desenvolvimento de Banco de Dados com Cursor: SQL, ORMs e Integração Prisma

Cursor Database Development

O desenvolvimento de bancos de dados é uma parte central da engenharia de software moderna, e os recursos de IA do Cursor podem acelerar drasticamente o design de esquemas, a escrita de consultas e a integração com ORMs. Este guia aborda fluxos de trabalho práticos para edição SQL, configuração de ORM, migrações e otimização de bancos de dados baseada em IA.

Pré-requisitos​

Antes de começar, você precisará de:

  • Cursor instalado (versão mais recente recomendada)
  • Servidor de banco de dados em execução localmente ou remotamente (PostgreSQL, MySQL ou SQLite)
  • Node.js instalado (para ferramentas de ORM)
  • Noções básicas de SQL e conceitos de banco de dados

Configurando um Projeto de Banco de Dados no Cursor​

Estrutura do Projeto​

Organize seus arquivos relacionados ao banco de dados de forma estruturada para otimizar o contexto da IA:

project/
prisma/
schema.prisma # Esquema Prisma
migrations/ # Arquivos de migração
src/
db/
connection.ts # Conexão com banco de dados
queries/ # Consultas SQL brutas
repositories/ # Camada de acesso a dados
scripts/
seed.ts # Seeding do banco de dados
docker-compose.yml # Configuração do banco de dados local

Abrindo o Projeto no Cursor​

cd ~/my-database-project
cursor .

Editando SQL com Cursor​

Escrevendo Consultas Complexas​

O Cursor é excelente para gerar e otimizar SQL. Use prompts em linguagem natural:

Escreva uma consulta PostgreSQL para encontrar os 5 principais clientes por valor total de pedidos nos últimos 30 dias.
Deve incluir nome, e-mail e total gasto.

Resultado gerado pelo Cursor:

SELECT
c.id,
c.name,
c.email,
SUM(o.total_amount) AS total_spent
FROM customers c
JOIN orders o ON c.id = o.customer_id
WHERE o.created_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY c.id, c.name, c.email
ORDER BY total_spent DESC
LIMIT 5;

Otimizando Consultas​

Cole uma consulta lenta e peça ao Cursor para otimizá-la:

Esta consulta está demorando mais de 3 segundos em uma tabela com 1 milhão de linhas. Otimização:
[Colar consulta]

O Cursor sugerirá índices, reescritas de consulta e explicará as melhorias de desempenho.

Suporte a Arquivos SQL​

O Cursor fornece realce de sintaxe e IntelliSense para arquivos .sql:

  1. Crie um arquivo .sql
  2. O Cursor ativa automaticamente o modo de linguagem SQL
  3. Use Ctrl+Space para autocompletar nomes de tabelas e colunas
Dica de Especialista

Armazene padrões de consulta reutilizáveis em arquivos .sql. O Cursor indexa esses arquivos e pode referenciá-los ao gerar novas consultas.

Integração com Prisma​

Configurando o Prisma​

Inicialize o Prisma em seu projeto:

npm install prisma @prisma/client
npx prisma init

Design de Esquema com IA​

Descreva seu modelo de dados em linguagem natural:

Projete um esquema Prisma para um aplicativo de e-commerce com:
- Usuários (papéis: admin, cliente, vendedor)
- Produtos (categorias, controle de estoque)
- Pedidos (status, detalhes de envio)
- Avaliações (vinculadas a produtos e usuários)

Resultado gerado pelo Cursor:

model User {
id Int @id @default(autoincrement())
email String @unique
name String
role Role @default(CUSTOMER)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

orders Order[]
reviews Review[]
}

enum Role {
ADMIN
CUSTOMER
SELLER
}

model Product {
id Int @id @default(autoincrement())
name String
description String?
price Decimal @db.Decimal(10, 2)
inventory Int @default(0)
categoryId Int

category Category @relation(fields: [categoryId], references: [id])
reviews Review[]
orderItems OrderItem[]
}

model Category {
id Int @id @default(autoincrement())
name String @unique
products Product[]
}

model Order {
id Int @id @default(autoincrement())
status OrderStatus @default(PENDING)
total Decimal @db.Decimal(10, 2)
createdAt DateTime @default(now())
userId Int

user User @relation(fields: [userId], references: [id])
orderItems OrderItem[]
}

enum OrderStatus {
PENDING
PROCESSING
SHIPPED
DELIVERED
CANCELLED
}

model OrderItem {
id Int @id @default(autoincrement())
quantity Int
unitPrice Decimal @db.Decimal(10, 2)
orderId Int
productId Int

order Order @relation(fields: [orderId], references: [id])
product Product @relation(fields: [productId], references: [id])
}

model Review {
id Int @id @default(autoincrement())
rating Int
comment String?
createdAt DateTime @default(now())
userId Int
productId Int

user User @relation(fields: [userId], references: [id])
product Product @relation(fields: [productId], references: [id])

@@unique([userId, productId])
}

Criando Migrações​

Após alterar o esquema, gere e aplique migrações:

npx prisma migrate dev --name add_user_roles

Use o Cursor para revisar arquivos de migração antes de aplicá-los:

Revise este arquivo de migração para possíveis perdas de dados ou problemas:
[Colar conteúdo do migration.sql]

Consultas com Prisma Client​

Gere consultas tipadas com ajuda da IA:

Escreva uma consulta Prisma para buscar todos os pedidos de um usuário com detalhes dos produtos
const userOrders = await prisma.order.findMany({
where: { userId: 1 },
include: {
orderItems: {
include: {
product: {
select: {
name: true,
price: true,
},
},
},
},
},
orderBy: {
createdAt: 'desc',
},
});

Fluxos de Trabalho com TypeORM e Sequelize​

Configuração do TypeORM​

// src/db/data-source.ts
import { DataSource } from 'typeorm';
import { User } from './entities/User';
import { Order } from './entities/Order';

export const AppDataSource = new DataSource({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'user',
password: 'password',
database: 'myapp',
synchronize: false,
logging: true,
entities: [User, Order],
migrations: ['src/migrations/*.ts'],
});

Modelos do Sequelize​

// src/models/User.js
const { DataTypes } = require('sequelize');

module.exports = (sequelize) => {
const User = sequelize.define('User', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: true,
},
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
}, {
tableName: 'users',
timestamps: true,
});

return User;
};

Visualização de Esquema do Banco de Dados​

Usando o Prisma ERD​

Gere um diagrama de entidade-relacionamento:

npx prisma generate --generator erd

Ou peça ao Cursor para criar um esquema visual:

Gere um diagrama ERD Mermaid para o esquema Prisma deste projeto

Otimização de Consultas com IA​

Análise de Desempenho de Consultas​

Compartilhe sua consulta e o plano de execução:

Esta consulta está usando scan sequencial. Como posso otimizá-la adicionando índices?

EXPLAIN ANALYZE SELECT * FROM orders WHERE status = 'pending' AND created_at > '2024-01-01';

O Cursor sugerirá:

CREATE INDEX idx_orders_status_created_at ON orders(status, created_at);

Revisão de Design de Banco de Dados​

Peça ao Cursor para auditar seu esquema quanto às melhores práticas:

Revise este esquema de banco de dados para:
1. Problemas de normalização
2. Índices ausentes em chaves estrangeiras
3. Otimização de tipos de dados
4. Problemas potenciais de concorrência

Docker Compose para Desenvolvimento Local​

version: '3.8'
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: dev
POSTGRES_PASSWORD: devpass
POSTGRES_DB: myapp
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data

mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: myapp
MYSQL_USER: dev
MYSQL_PASSWORD: devpass
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql

volumes:
postgres_data:
mysql_data:

Tarefas Comuns de Banco de Dados​

TarefaExemplo de Prompt do Cursor
Gerar migração"Crie uma migração para adicionar coluna de exclusão suave à tabela users"
Dados de seed"Escreva um script de seed para popular o banco com 100 usuários de teste"
Backup"Escreva um comando pg_dump para fazer backup apenas das tabelas users e orders"
Connection Pooling"Configure connection pooling para um app Node.js com 100 usuários simultâneos"
Auditoria"Adicione uma tabela de log de auditoria para rastrear todas as mudanças na tabela orders"

Depurando Problemas de Banco de Dados​

Problemas de Conexão​

O Prisma Client não consegue conectar ao PostgreSQL. A string de conexão e o erro são:
[Colar erro]

Falhas de Migração​

Quando migrações falham:

  1. Verifique o status da migração:
npx prisma migrate status
  1. Peça ao Cursor para analisar a falha e sugerir correções

  2. Resolva conflitos e marque como aplicada se necessário:

npx prisma migrate resolve --applied migration_name

Melhores Práticas​

Segurança​

  • Nunca commit credenciais de banco de dados no controle de versão
  • Use variáveis de ambiente para strings de conexão
  • Habilite SSL para conexões de produção
  • Use consultas parametrizadas para evitar injeção SQL

Desempenho​

  • Adicione índices em colunas frequentemente consultadas
  • Use connection pooling em produção
  • Implemente cache de resultados de consulta para cargas de trabalho intensivas em leitura
  • Monitore logs de consultas lentas

Controle de Versão​

# Database
*.db
*.sqlite
*.sqlite3
.env
.env.local
prisma/migrations/migration_lock.toml

Referência Rápida​

TarefaComando
Gerar Prisma Clientnpx prisma generate
Executar migraçãonpx prisma migrate dev
Resetar banco de dadosnpx prisma migrate reset
Abrir Prisma Studionpx prisma studio
Seed do banco de dadosnpx prisma db seed
Formatar esquemanpx prisma format

Recursos Relacionados​

Última atualização: Julho de 2025