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

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:
- Crie um arquivo
.sql - O Cursor ativa automaticamente o modo de linguagem SQL
- Use
Ctrl+Spacepara autocompletar nomes de tabelas e colunas
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;
};