メインコンテンツまでスキップ

Cursor データベース開発:SQL、ORM、Prisma 統合

Cursor Database Development

データベース開発は現代のソフトウェアエンジニアリングの重要な部分であり、Cursor の AI 機能はスキーマ設計、クエリ作成、ORM 統合を劇的に高速化できます。このガイドでは、SQL 編集、ORM 設定、マイグレーション、AI 支援データベース最適化の実用的なワークフローについて説明します。

前提条件​

開始する前に:

  • Cursor をインストール(最新バージョンを推奨)
  • データベースサーバーがローカルで実行中、またはリモートからアクセス可能(PostgreSQL、MySQL、または SQLite)
  • Node.js をインストール(ORM ツール用)
  • SQL とデータベースの概念の基礎知識

Cursor でのデータベースプロジェクト設定​

プロジェクト構造​

最適な AI コンテキストを得るために、データベース関連のファイルを整理します:

project/
prisma/
schema.prisma # Prisma スキーマ
migrations/ # マイグレーションファイル
src/
db/
connection.ts # データベース接続
queries/ # 生 SQL クエリ
repositories/ # データアクセス層
scripts/
seed.ts # データベースシーディング
docker-compose.yml # ローカルデータベース設定

Cursor でプロジェクトを開く​

cd ~/my-database-project
cursor .

Cursor を使用した SQL 編集​

複雑なクエリの作成​

Cursor は SQL の生成と最適化に優れています。自然言語プロンプトを使用します:

過去 30 日間の総注文金額上位 5 名の顧客を検索する PostgreSQL クエリを作成してください。
名前、メールアドレス、総消費金額を含めてください。

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;

クエリ最適化​

遅いクエリを貼り付けて、Cursor に最適化を依頼します:

このクエリは 100 万行のテーブルで 3 秒以上かかっています。最適化してください:
[クエリを貼り付け]

Cursor はインデックス、クエリの書き換え、およびパフォーマンスの改善について提案します。

SQL ファイルのサポート​

Cursor は .sql ファイルに対してシンタックスハイライトと IntelliSense を提供します:

  1. .sql ファイルを作成
  2. Cursor は自動的に SQL 言語モードを有効化
  3. Ctrl+Space でテーブル名と列名の自動補完を使用
プロのヒント

再利用可能なクエリパターンを .sql ファイルに保存します。Cursor はそれらをインデックス化し、新しいクエリを生成する際に参照できます。

Prisma 統合​

Prisma の設定​

プロジェクトで Prisma を初期化します:

npm install prisma @prisma/client
npx prisma init

AI を使用したスキーマ設計​

自然言語でデータモデルを説明します:

以下を含む e コマースアプリケーションの Prisma スキーマを設計してください:
- ユーザー(ロール:admin、customer、seller)
- 製品(カテゴリ、在庫追跡を含む)
- 注文(ステータス、配送詳細を含む)
- レビュー(製品とユーザーにリンク)

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])
}

マイグレーションの生成​

スキーマ変更後、マイグレーションを生成して適用します:

npx prisma migrate dev --name add_user_roles

適用前に Cursor を使用してマイグレーションファイルを確認します:

潜在的なデータ損失や問題がないか、このマイグレーションファイルを確認してください:
[マイグレーション.sql コンテンツを貼り付け]

Prisma クライアントクエリ​

AI アシスタンスを使用して型安全なクエリを生成します:

製品の詳細を含むユーザーのすべての注文を取得する Prisma クエリを作成してください
const userOrders = await prisma.order.findMany({
where: { userId: 1 },
include: {
orderItems: {
include: {
product: {
select: {
name: true,
price: true,
},
},
},
},
},
orderBy: {
createdAt: 'desc',
},
});

TypeORM と Sequelize のワークフロー​

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'],
});

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;
};

データベーススキーマの可視化​

Prisma ERD の使用​

エンティティ関係図を生成します:

npx prisma generate --generator erd

または、Cursor に視覚的なスキーマを作成するよう依頼します:

このプロジェクトの Prisma スキーマの Mermaid ERD 図を作成してください

AI 支援クエリ最適化​

クエリパフォーマンスの分析​

クエリと実行計画を共有します:

このクエリはシーケンシャルスキャンを実行しています。最適化するためにどのようなインデックスを追加できますか?

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

Cursor が提案します:

CREATE INDEX idx_orders_status_created_at ON orders(status, created_at);

データベース設計のレビュー​

Cursor にスキーマのベストプラクティスを確認するよう依頼します:

以下について、このデータベーススキーマを確認してください:
1. 正規化の問題
2. 外部キーに欠けているインデックス
3. データ型の最適化
4. 潜在的な並行性の問題

ローカル開発用 Docker Compose​

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:

一般的なデータベースタスク​

タスクCursor プロンプトの例
マイグレーションの作成"users テーブルにソフト削除列を追加するマイグレーションを生成する"
シードデータ"100 人のテストユーザーをデータベースに追加するシードスクリプトを作成する"
バックアップクエリ"users と orders テーブルのみをバックアップする pg_dump コマンドを作成する"
接続プーリング"100 人の同時ユーザーを持つ Node.js アプリの接続プーリングを設定する"
監査ログ"orders テーブルのすべての変更を追跡する監査ログテーブルを追加する"

データベース問題のデバッグ​

接続問題​

Prisma クライアントが PostgreSQL に接続できません。接続文字列とエラーは以下の通りです:
[エラーを貼り付け]

マイグレーションの失敗​

マイグレーションが失敗した場合:

  1. マイグレーションステータスを確認:
npx prisma migrate status
  1. Cursor に失敗を分析させ、修正を提案させる

  2. 競合を解決し、必要に応じて適用済みとしてマーク:

npx prisma migrate resolve --applied migration_name

ベストプラクティス​

セキュリティ​

  • データベースの認証情報をバージョン管理にコミットしない
  • 接続文字列には環境変数を使用する
  • 本番接続には SSL を有効化する
  • SQL インジェクションを防ぐためにパラメータ化クエリを使用する

パフォーマンス​

  • 頻繁にクエリされる列にインデックスを追加する
  • 本番環境で接続プーリングを使用する
  • 読み取りが多いワークロードにはクエリ結果キャッシュを実装する
  • スロークエリログを監視する

バージョン管理​

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

クイックリファレンス​

アクションコマンド
Prisma クライアントの生成npx prisma generate
マイグレーションの実行npx prisma migrate dev
データベースのリセットnpx prisma migrate reset
Prisma Studio を開くnpx prisma studio
データベースのシーディングnpx prisma db seed
スキーマのフォーマットnpx prisma format

関連リソース​

最終更新:2025 年 7 月