Cursor Datenbankentwicklung: SQL, ORM und Prisma-Integration

Die Datenbankentwicklung ist ein kritischer Bestandteil der modernen Softwareentwicklung, und die KI-Funktionen von Cursor können die Schema-Design, Abfrageschreibung und ORM-Integration erheblich beschleunigen. Dieser Leitfaden deckt praktische Workflows für SQL-Bearbeitung, ORM-Einrichtung, Migrationen und KI-gestützte Datenbankoptimierung ab.
Voraussetzungen
Bevor Sie beginnen:
- Cursor installiert (neueste Version empfohlen)
- Datenbankserver läuft lokal oder ist remote erreichbar (PostgreSQL, MySQL oder SQLite)
- Node.js installiert (für ORM-Tools)
- Grundverständnis von SQL und Datenbankkonzepten
Einrichten von Datenbankprojekten in Cursor
Projektstruktur
Organisieren Sie Ihre datenbankbezogenen Dateien für optimalen KI-Kontext:
project/
prisma/
schema.prisma # Prisma-Schema
migrations/ # Migrationsdateien
src/
db/
connection.ts # Datenbankverbindung
queries/ # Rohe SQL-Abfragen
repositories/ # Datenzugriffsschicht
scripts/
seed.ts # Datenbank-Seeding
docker-compose.yml # Lokale Datenbank-Einrichtung
Projekt in Cursor öffnen
cd ~/my-database-project
cursor .
SQL-Bearbeitung mit Cursor
Komplexe Abfragen schreiben
Cursor zeichnet sich durch die Generierung und Optimierung von SQL aus. Verwenden Sie natürliche Sprach-Prompts:
Schreibe eine PostgreSQL-Abfrage, um die Top 5 Kunden nach Gesamtbestellwert
in den letzten 30 Tagen zu finden, einschließlich Name, E-Mail und Gesamtausgaben.
Cursor generiert:
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;
Abfrageoptimierung
Fügen Sie eine langsame Abfrage ein und bitten Sie Cursor, sie zu optimieren:
Diese Abfrage dauert auf einer Tabelle mit 1M Zeilen über 3 Sekunden. Optimiere sie:
[Abfrage einfügen]
Cursor schlägt Indizes, Abfrage-Neuschreibungen und erklärt die Leistungsverbesserungen.
SQL-Datei-Unterstützung
Cursor bietet Syntaxhervorhebung und IntelliSense für .sql-Dateien:
- Erstellen Sie eine
.sql-Datei - Cursor aktiviert automatisch den SQL-Sprachmodus
- Verwenden Sie
Ctrl+Spacefür die Autovervollständigung von Tabellen- und Spaltennamen
Speichern Sie wiederverwendbare Abfragemuster in .sql-Dateien. Cursor indiziert sie und kann sie bei der Generierung neuer Abfragen referenzieren.
Prisma-Integration
Prisma einrichten
Initialisieren Sie Prisma in Ihrem Projekt:
npm install prisma @prisma/client
npx prisma init
Schema-Design mit KI
Beschreiben Sie Ihr Datenmodell in natürlicher Sprache:
Entwerfe ein Prisma-Schema für eine E-Commerce-Anwendung mit:
- Benutzern (mit Rollen: admin, customer, seller)
- Produkten (mit Kategorien, Bestandsverfolgung)
- Bestellungen (mit Status, Versanddetails)
- Bewertungen (verknüpft mit Produkten und Benutzern)
Cursor generiert:
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])
}
Migrationen generieren
Nach Schema-Änderungen Migrationen generieren und anwenden:
npx prisma migrate dev --name add_user_roles
Verwenden Sie Cursor, um Migrationsdateien vor der Anwendung zu überprüfen:
Überprüfe diese Migrationsdatei auf potenziellen Datenverlust oder Probleme:
[Migrations.sql-Inhalt einfügen]
Prisma Client-Abfragen
Generieren Sie typsichere Abfragen mit KI-Unterstützung:
Schreibe eine Prisma-Abfrage, um alle Bestellungen eines Benutzers einschließlich Produktdetails zu erhalten
const userOrders = await prisma.order.findMany({
where: { userId: 1 },
include: {
orderItems: {
include: {
product: {
select: {
name: true,
price: true,
},
},
},
},
},
orderBy: {
createdAt: 'desc',
},
});
TypeORM- und Sequelize-Workflows
TypeORM-Einrichtung
// 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'],
});
Sequelize-Modelle
// 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;
};
Datenbankschema-Visualisierung
Prisma ERD verwenden
Entity-Relationship-Diagramme generieren:
npx prisma generate --generator erd
Oder bitten Sie Cursor, ein visuelles Schema zu erstellen:
Erstelle ein Mermaid-ERD-Diagramm für das Prisma-Schema in diesem Projekt
KI-gestützte Abfrageoptimierung
Abfrageleistung analysieren
Teilen Sie Ihre Abfrage und den Ausführungsplan:
Diese Abfrage führt einen sequenziellen Scan durch. Wie kann ich Indizes hinzufügen, um sie zu optimieren?
EXPLAIN ANALYZE SELECT * FROM orders WHERE status = 'pending' AND created_at > '2024-01-01';
Cursor schlägt vor:
CREATE INDEX idx_orders_status_created_at ON orders(status, created_at);
Datenbankdesign-Review
Bitten Sie Cursor, Ihr Schema nach Best Practices zu überprüfen:
Überprüfe dieses Datenbankschema auf:
1. Normalisierungsprobleme
2. Fehlende Indizes auf Fremdschlüsseln
3. Datentyp-Optimierungen
4. Potenzielle Parallelitätsprobleme
Docker Compose für lokale Entwicklung
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:
Häufige Datenbankaufgaben
| Aufgabe | Cursor Prompt-Beispiel |
|---|---|
| Migration erstellen | "Generiere eine Migration, um eine Soft-Delete-Spalte zur users-Tabelle hinzuzufügen" |
| Seed-Daten | "Schreibe ein Seed-Skript, um die Datenbank mit 100 Testbenutzern zu füllen" |
| Backup-Abfrage | "Schreibe einen pg_dump-Befehl, um nur die users- und orders-Tabellen zu sichern" |
| Verbindungspooling | "Konfiguriere Verbindungspooling für eine Node.js-App mit 100 gleichzeitigen Benutzern" |
| Audit-Logging | "Füge eine Audit-Log-Tabelle hinzu, die alle Änderungen an der orders-Tabelle verfolgt" |
Datenbankprobleme debuggen
Verbindungsprobleme
Mein Prisma-Client kann keine Verbindung zu PostgreSQL herstellen. Hier ist meine Verbindungszeichenfolge und der Fehler:
[Fehler einfügen]
Migrationsfehler
Wenn eine Migration fehlschlägt:
- Überprüfen Sie den Migrationsstatus:
npx prisma migrate status
-
Bitten Sie Cursor, den Fehler zu analysieren und Korrekturen vorzuschlagen
-
Lösen Sie Konflikte und markieren Sie gegebenenfalls als angewendet:
npx prisma migrate resolve --applied migration_name
Best Practices
Sicherheit
- Datenbankanmeldeinformationen niemals in die Versionskontrolle committen
- Umgebungsvariablen für Verbindungszeichenfolgen verwenden
- SSL für Produktionsverbindungen aktivieren
- Parametrisierte Abfragen verwenden, um SQL-Injection zu verhindern
Leistung
- Indizes auf häufig abgefragten Spalten hinzufügen
- Verbindungspooling in der Produktion verwenden
- Abfrageergebnis-Caching für leseintensive Workloads implementieren
- Langsame Abfrage-Logs überwachen
Versionskontrolle
# Database
*.db
*.sqlite
*.sqlite3
.env
.env.local
prisma/migrations/migration_lock.toml
Kurzreferenz
| Aktion | Befehl |
|---|---|
| Prisma-Client generieren | npx prisma generate |
| Migrationen ausführen | npx prisma migrate dev |
| Datenbank zurücksetzen | npx prisma migrate reset |
| Prisma Studio öffnen | npx prisma studio |
| Datenbank seeden | npx prisma db seed |
| Schema formatieren | npx prisma format |
Verwandte Ressourcen
Zuletzt aktualisiert: Juli 2025