𝕏 f B! L
案件・求人数 12,345
案件を探す(準備中) エージェントを探す(準備中) お役立ち情報 ログイン
案件・求人数 12,345
Claude Codeでデータベース設計を効率化|ER図生成・正規化・マイグレーション自動化ガイド

Claude Codeでデータベース設計を効率化|ER図生成・正規化・マイグレーション自動化ガイド

Claude Codeデータベース設計SQLマイグレーションSES
目次

「テーブル設計に毎回悩む」「マイグレーションファイルの手書きが面倒」「正規化の判断に自信がない」——データベース設計はアプリケーション開発の根幹でありながら、多くのエンジニアが苦手意識を持つ領域です。

Claude Codeを活用すれば、要件定義からER図生成、正規化分析、マイグレーションファイル作成までのデータベース設計ワークフローを大幅に効率化できます。AIが設計パターンの提案から実装まで一貫してサポートし、設計品質と開発速度の両方を向上させます。

⚡ 3秒でわかる!この記事のポイント
  • Claude Codeで自然言語の要件からER図・テーブル定義を自動生成し、設計時間を60%短縮
  • 正規化分析・インデックス最適化・パフォーマンスチューニングをAIが提案
  • SES現場で即使えるDB設計プロンプトテンプレートとマイグレーション自動化の実践例付き

Claude Code × データベース設計の全体像

Claude Code データベース設計ワークフロー

データベース設計は通常、以下のフェーズで進みます。

  1. 要件分析 — ビジネスロジックからエンティティを抽出
  2. 概念設計 — ER図の作成とリレーション定義
  3. 論理設計 — 正規化とデータ型の決定
  4. 物理設計 — インデックス・パーティション設計
  5. 実装 — マイグレーションファイルの作成とレビュー

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と一緒に取り組んでみてください。


関連記事

SES案件をお探しですか?

SES記事をもっと読む →
🏗️

SES BASE 編集長

SES業界歴10年以上のメンバーが在籍する編集チーム。SES企業での営業・エンジニア経験、フリーランス独立経験を持つメンバーが、業界のリアルな情報をお届けします。

📊 業界データに基づく記事制作 🔍 IPA・経済産業省データ参照 💼 SES実務経験者が執筆・監修