「テーブル設計に毎回悩む」「マイグレーションファイルの手書きが面倒」「正規化の判断に自信がない」——データベース設計はアプリケーション開発の根幹でありながら、多くのエンジニアが苦手意識を持つ領域です。
Claude Codeを活用すれば、要件定義からER図生成、正規化分析、マイグレーションファイル作成までのデータベース設計ワークフローを大幅に効率化できます。AIが設計パターンの提案から実装まで一貫してサポートし、設計品質と開発速度の両方を向上させます。
- Claude Codeで自然言語の要件からER図・テーブル定義を自動生成し、設計時間を60%短縮
- 正規化分析・インデックス最適化・パフォーマンスチューニングをAIが提案
- SES現場で即使えるDB設計プロンプトテンプレートとマイグレーション自動化の実践例付き
Claude Code × データベース設計の全体像

データベース設計は通常、以下のフェーズで進みます。
- 要件分析 — ビジネスロジックからエンティティを抽出
- 概念設計 — ER図の作成とリレーション定義
- 論理設計 — 正規化とデータ型の決定
- 物理設計 — インデックス・パーティション設計
- 実装 — マイグレーションファイルの作成とレビュー
Claude Codeはこれらすべてのフェーズで威力を発揮します。特に要件の自然言語記述からER図やDDLを自動生成する能力は、設計初期のスピードを劇的に向上させます。
要件からテーブル設計を自動生成する
基本プロンプト
プロジェクトの要件ドキュメントをClaude Codeに読み込ませるだけで、テーブル設計のたたき台が得られます。
claude "docs/requirements.mdを読んで、必要なデータベーステーブルを設計して。
以下の形式で出力して:
1. エンティティ一覧(日本語名 + 英語テーブル名)
2. 各テーブルのカラム定義(名前・型・制約・説明)
3. テーブル間のリレーション
4. PostgreSQL用のCREATE TABLE文"
実践例:ECサイトのDB設計
たとえば「ユーザーが商品を検索・購入・レビューできるECサイト」という要件から、Claude Codeは以下のような設計を提案します。
-- ユーザーテーブル
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
display_name VARCHAR(100) NOT NULL,
phone VARCHAR(20),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- 商品テーブル
CREATE TABLE products (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(200) NOT NULL,
description TEXT,
price DECIMAL(10, 2) NOT NULL CHECK (price >= 0),
stock_quantity INTEGER NOT NULL DEFAULT 0 CHECK (stock_quantity >= 0),
category_id UUID REFERENCES categories(id),
is_active BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- 注文テーブル
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id),
status VARCHAR(20) NOT NULL DEFAULT 'pending'
CHECK (status IN ('pending', 'confirmed', 'shipped', 'delivered', 'cancelled')),
total_amount DECIMAL(12, 2) NOT NULL,
shipping_address_id UUID REFERENCES addresses(id),
ordered_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
ポイントは、Claude Codeが制約条件(CHECK制約・UNIQUE・NOT NULL)を自動的に付与してくれる点です。経験の浅いエンジニアが見落としがちなデータ整合性のガードレールがデフォルトで含まれます。
正規化分析と最適化
既存テーブルの正規化チェック
既存のDB設計をClaude Codeに分析させることで、正規化の問題点を発見できます。
claude "schema.sqlを分析して、以下の観点で問題点を指摘して:
1. 第1正規形〜第3正規形の違反
2. 冗長なカラムやテーブル
3. リレーションの設計ミス
4. 修正案を具体的なALTER TABLE文で提示"
非正規化の戦略的判断
パフォーマンスのために意図的に非正規化する場合も、Claude Codeがトレードオフを明確にしたうえで提案してくれます。
claude "productsテーブルのcategory_nameカラムを非正規化して持たせたい。
以下を考慮して設計して:
1. 更新時の整合性確保(トリガー or アプリ層)
2. パフォーマンスのメリット定量化
3. 将来的なリスクと対策"
Claude Codeは「この非正規化により、JOIN数が1回減り、商品一覧のクエリが約30%高速化する見込み」「ただし、カテゴリ名変更時にproductsテーブルの一括更新が必要」といった定量的な分析を提供してくれます。
ER図の自動生成
Mermaid記法でのER図出力
Claude Codeに直接Mermaid記法のER図を生成させることで、ドキュメントとの一貫性を保てます。
claude "現在のschema.sqlからMermaid記法のER図を生成して。
- エンティティ名は日本語で
- カラム名はそのまま英語で
- リレーションの多重度も明記して"
出力例:
erDiagram
USERS ||--o{ ORDERS : "注文する"
USERS ||--o{ REVIEWS : "レビューする"
ORDERS ||--|{ ORDER_ITEMS : "含む"
PRODUCTS ||--o{ ORDER_ITEMS : "注文される"
PRODUCTS ||--o{ REVIEWS : "レビューされる"
CATEGORIES ||--o{ PRODUCTS : "分類する"
USERS {
uuid id PK
varchar email UK
varchar display_name
timestamptz created_at
}
ORDERS {
uuid id PK
uuid user_id FK
varchar status
decimal total_amount
}
PlantUML・dbdiagramへの変換
チームのツールに合わせてフォーマットを変換することも簡単です。
claude "このMermaid ER図をdbdiagram.io形式(DBML)に変換して"
マイグレーション自動化
フレームワーク対応マイグレーション生成
Claude Codeは主要なORMフレームワークのマイグレーション形式に対応しています。
# Prismaのスキーマ生成
claude "schema.sqlからPrismaのschema.prismaファイルを生成して。
リレーションとインデックスも含めて"
# TypeORM用マイグレーション
claude "usersテーブルにprofile_image_urlカラムを追加する
TypeORMのマイグレーションファイルを生成して。
Up/Downの両方を含めて"
# Rails ActiveRecordマイグレーション
claude "この変更をRailsのマイグレーションファイルとして出力して"
マイグレーションのレビュー
既存のマイグレーションファイルの安全性チェックも重要です。
claude "migrations/ディレクトリのマイグレーションをレビューして:
1. データ消失リスクのある操作はないか
2. ロック時間の長いALTER TABLEはないか
3. ロールバック可能か
4. 本番環境での実行順序に問題はないか"
インデックス設計とクエリ最適化
インデックス提案
Claude Codeにアプリケーションのクエリパターンを伝えることで、最適なインデックスを提案してもらえます。
claude "以下のクエリパターンに最適なインデックスを設計して:
1. ユーザーのメールアドレスで検索(ログイン)
2. カテゴリ別に商品を価格順で取得
3. 特定期間の注文を新しい順で取得
4. 全文検索(商品名・説明文)
各インデックスについて、サイズ見積もりと更新への影響も教えて"
EXPLAINの解析
遅いクエリのEXPLAIN結果をClaude Codeに貼り付けることで、最適化の方向性を判断できます。
claude "このEXPLAIN ANALYZEの結果を分析して、改善策を提案して:
$(psql -c 'EXPLAIN ANALYZE SELECT ...' mydb)"
Claude Codeは「Seq Scanがbottleneckになっている。products.category_idにインデックスを追加すると、実行時間が120ms→3msに改善される見込み」といった具体的な改善提案を出してくれます。
SES現場で使えるDB設計パターン
パターン1:既存システムのDB調査
SES案件に参入したとき、最初にやるべきはDBスキーマの理解です。
# pg_dumpでスキーマを取得してClaude Codeに分析させる
pg_dump --schema-only mydb > schema.sql
claude "schema.sqlを分析して以下を教えて:
1. 主要エンティティの一覧と役割
2. テーブル間の依存関係図(Mermaid)
3. 設計上の懸念点(正規化違反・命名規則の不統一など)
4. 推定されるビジネスロジック"
このアプローチにより、ドキュメントが不十分なプロジェクトでもDBスキーマからシステム全体像を把握できます。
パターン2:テーブル追加の影響分析
新機能開発でテーブルを追加する際の影響範囲を分析します。
claude "通知機能を追加するためにnotificationsテーブルを追加したい。
既存のschema.sqlとの整合性を確認して:
1. 必要な外部キー関係
2. 既存テーブルへの変更の有無
3. パフォーマンスへの影響
4. マイグレーション手順"
パターン3:パフォーマンス改善提案
本番環境のスロークエリ対応は、SES案件で頻繁に発生するタスクです。
claude "slow_query.logの内容を分析して:
1. 問題のあるクエリTOP5
2. 各クエリの改善案(インデックス追加・クエリ書き換え)
3. テーブル構造の変更が必要な場合の提案
4. 改善のROI(効果 vs 作業量)"
パターン4:データ移行スクリプトの生成
旧システムから新システムへのデータ移行も、Claude Codeが得意とする領域です。
claude "old_schema.sqlからnew_schema.sqlへのデータ移行スクリプトを生成して:
1. カラムのマッピング(型変換含む)
2. 新テーブルに必要なデフォルト値の設定
3. 外部キー制約を考慮した挿入順序
4. エラーハンドリングとロールバック手順
5. 進捗表示付きのバッチ処理"
マルチDB対応と方言の変換
SES現場では、案件ごとに異なるDBMSを使うことが日常茶飯事です。Claude Codeは主要なDBMSの方言を理解しており、変換を自動化できます。
# PostgreSQL → MySQL変換
claude "このPostgreSQLのDDLをMySQL 8.0互換に変換して。
- UUID → CHAR(36)
- TIMESTAMPTZ → DATETIME
- SERIAL → AUTO_INCREMENT
- CHECK制約の代替手段も提案して"
# MySQL → SQL Server変換
claude "このMySQLスキーマをSQL Server 2022に移植して。
T-SQL固有の最適化も適用して"
CLAUDE.mdによるDB設計ルールの統一
チームでClaude Codeを使う場合、CLAUDE.mdにDB設計のルールを記述しておくと、全メンバーが一貫した設計を行えます。
# CLAUDE.md - DB設計ガイドライン
## テーブル設計ルール
- テーブル名: スネークケース・複数形(例: order_items)
- 主キー: UUID型のidカラム
- タイムスタンプ: created_at, updated_at必須(TIMESTAMPTZ)
- 論理削除: deleted_atカラム(物理削除は原則禁止)
- 外部キー: 必ずON DELETE CASCADEまたはSET NULLを明示
## インデックスルール
- 外部キーには必ずインデックス作成
- 複合インデックスはカーディナリティ順
- 部分インデックスを積極的に活用
## マイグレーションルール
- ファイル名: YYYYMMDDHHMMSS_description.sql
- 必ずUP/DOWNの両方を記述
- 本番データを想定したテストデータ付き
データモデリングのベストプラクティス
ソフトデリート vs ハードデリート
claude "以下の要件でソフトデリートとハードデリートのどちらが適切か分析して:
- ユーザーデータ: GDPR対応が必要
- 注文データ: 会計監査のため保持が必要
- セッションデータ: 一時的なデータ
各テーブルごとに推奨と理由を教えて"
マルチテナント設計
SaaS案件ではマルチテナント設計が求められることがあります。
claude "マルチテナントのDB設計を3パターン提案して:
1. 共有テーブル(テナントIDカラム追加)
2. スキーマ分離
3. データベース分離
各パターンのメリット・デメリット・適用シーン・コスト比較を表形式で"
Claude Codeと他ツールの連携
Claude Code × pgAdmin/DBeaver
# DBeaverのER図エクスポートをClaude Codeで分析
claude "このER図の画像を見て、テーブル設計の改善点を指摘して"
# Claude Codeの出力をDDLファイルとして保存
claude "schema設計を最適化して、migration.sqlとして保存して"
Claude Code × Prisma/Drizzle
モダンなTypeScriptプロジェクトでは、Prisma SchemaやDrizzle ORMとの連携が強力です。
claude "既存のprisma/schema.prismaを分析して:
1. N+1問題が起きそうなリレーション
2. 不足しているインデックス
3. 型安全性を高めるための改善案"
テスト用データ生成
DB設計後のテストデータ生成もClaude Codeに任せられます。
claude "schema.sqlに基づいて:
1. 開発用シードデータ(各テーブル10件)
2. 負荷テスト用データ生成スクリプト(100万件)
3. エッジケースを含むテストデータ(NULL値・最大長・特殊文字)
を生成して"
まとめ:Claude CodeでDB設計を次のレベルへ
Claude Codeをデータベース設計に活用することで、以下のメリットが得られます。
- 設計速度の向上: 要件から初期設計まで60%の時間短縮
- 品質の向上: 正規化チェック・制約設計の自動化で設計ミスを削減
- ドキュメント自動化: ER図・DDL・マイグレーションの一括生成
- 学習効果: AIの提案から設計パターンを学べる
特にSES現場では、案件ごとに異なるDBMS・ORM・設計規約に対応する必要があり、Claude Codeの知識ベースが大きなアドバンテージになります。
次の案件でDB設計タスクが来たら、ぜひClaude Codeと一緒に取り組んでみてください。