SQL to Prisma

SQL DDL から Prisma スキーマへの変換ツール(モデル・リレーション・Enum)開発者ガイド

SQLのCREATE TABLE DDL文を高精度に解析し、Prisma ORMのモデル定義、リレーション属性、フィールドマッピング、Enumへと瞬時に変換します。

Presets:
DB プロバイダー:
SQL DDL 入力(5 tables)
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

enum OrderStatus {
  PENDING
  PROCESSING
  PAID
  SHIPPED
  DELIVERED
  CANCELLED
}

enum UserRole {
  ADMIN
  CUSTOMER
  MERCHANT
}

model User {
  id           String        @id @default(uuid()) @db.Uuid
  email        String        @unique @db.VarChar(255)
  fullName     String?       @map("full_name") @db.VarChar(150)
  role         UserRole      @default("CUSTOMER")
  isVerified   Boolean       @default(false) @map("is_verified")
  metadata     Json?
  createdAt    DateTime      @default(now()) @map("created_at") @db.Timestamptz
  updatedAt    DateTime      @default(now()) @updatedAt @map("updated_at") @db.Timestamptz
  userProfile  UserProfile?
  orders       Order[]

  @@map("users")
}

model UserProfile {
  id               String   @id @default(uuid()) @db.Uuid
  userId           String   @unique @map("user_id") @db.Uuid
  avatarUrl        String?  @map("avatar_url") @db.VarChar(500)
  phoneNumber      String?  @map("phone_number") @db.VarChar(32)
  shippingAddress  String?  @map("shipping_address") @db.Text
  taxIdentifier    String?  @map("tax_identifier") @db.VarChar(64)
  user             User     @relation(fields: [userId], references: [id], onDelete: Cascade)

  @@map("user_profiles")
}

model Product {
  id              Int          @id @default(autoincrement())
  sku             String       @unique @db.VarChar(64)
  title           String       @db.VarChar(200)
  description     String?      @db.Text
  unitPrice       Decimal      @default(0.00) @map("unit_price") @db.Decimal(12, 2)
  inventoryCount  Int          @default(0) @map("inventory_count")
  isActive        Boolean      @default(true) @map("is_active")
  createdAt       DateTime     @default(now()) @map("created_at") @db.Timestamptz
  orderItems      OrderItem[]

  @@index([sku])
  @@map("products")
}

model Order {
  id             String       @id @default(uuid()) @db.Uuid
  customerId     String       @map("customer_id") @db.Uuid
  orderNumber    String       @unique @map("order_number") @db.VarChar(64)
  status         OrderStatus  @default("PENDING")
  totalAmount    Decimal      @default(0.00) @map("total_amount") @db.Decimal(12, 2)
  taxAmount      Decimal      @default(0.00) @map("tax_amount") @db.Decimal(10, 2)
  shippingNotes  String?      @map("shipping_notes") @db.Text
  createdAt      DateTime     @default(now()) @map("created_at") @db.Timestamptz
  updatedAt      DateTime     @default(now()) @updatedAt @map("updated_at") @db.Timestamptz
  customer       User         @relation(fields: [customerId], references: [id], onDelete: Restrict)
  orderItems     OrderItem[]

  @@index([status])
  @@map("orders")
}

model OrderItem {
  id         Int      @id @default(autoincrement())
  orderId    String   @map("order_id") @db.Uuid
  productId  Int      @map("product_id")
  quantity   Int      @default(1)
  unitPrice  Decimal  @map("unit_price") @db.Decimal(12, 2)
  subtotal   Decimal  @db.Decimal(12, 2)
  order      Order    @relation(fields: [orderId], references: [id], onDelete: Cascade)
  product    Product  @relation(fields: [productId], references: [id], onDelete: Restrict)

  @@unique([orderId, productId])
  @@map("order_items")
}
検出モデル数5 models generated
推定リレーション数4 foreign keys resolved
検出 Enum 数2 typed enums

100% クライアントサイド保護

サーバーへのデータ送信や外部DB接続はゼロ。SQL DDL の解析、AST 抽出、Prisma スキーマ生成はすべてブラウザ内で安全に完結します。

高度なリレーションと外部キー解決

インラインおよび複合外部キーを自動検出し、双方向の Prisma @relation 属性、逆参照配列、@@id / @@unique 制約を正確に生成します。

マルチダイアレクト対応 DDL エンジン

PostgreSQL、MySQL、SQLite、SQL Server の構文に対応。SERIAL、UUID 初期値、ネイティブ型定義、複合インデックス、Enum を適切に変換します。

技術リファレンス&アーキテクチャガイド

SQL DDL から Prisma スキーマへの変換ツール(モデル・リレーション・Enum)開発者ガイド — リファレンスガイド

SQLのCREATE TABLE DDL文を高精度に解析し、Prisma ORMのモデル定義、リレーション属性、フィールドマッピング、Enumへと瞬時に変換します。

主要パラメータ&設定項目

SQL方言 (SQL Dialect)Enum (PostgreSQL | MySQL | SQLite | SQL Server | CockroachDB)

テーブル定義、方言特有のデータ型(SERIAL、VARCHAR、DATETIME2、JSONBなど)、およびデフォルト制約句を解析するためのターゲットSQL方言を指定します。

初期値: PostgreSQL
命名規則変換 (Naming & Case Convention)Enum (camelCase/PascalCase + @map | SQL識別子を維持)

データベースの snake_case テーブル名やカラム名をPrisma推奨のPascalCaseモデル名およびcamelCaseフィールド名に自動変換し、@@map および @map を付与して既存DBとの完全な互換性を保持します。

初期値: camelCase & PascalCase with @map
リレーション生成モード (Relation Mode)Enum (双方向 @relation 定義 | 外部キースカラーのみ)

外部キー制約から明示的な fields/references 配列を持つ双方向Prismaオブジェクトリレーションを生成するか、単純なスカラー外部キーフィールドのみを維持するかを設定します。

初期値: 双方向 @relation 定義
Enum処理方式 (Enum Strategy)Enum (最上位 Prisma enum として抽出 | 文字列型とコメント)

PostgreSQLのカスタムENUM型やMySQLのカラムレベルENUM宣言を最上位のPrisma enumブロックに抽出するか、標準のStringスカラー型としてコメント付きで変換するかを決定します。

初期値: 最上位 Prisma enum として抽出

プロの活用テクニック&推奨設定

@@map と @map を活用してDB互換性とPrismaの慣習的命名を両立する

camelCase/PascalCaseマッピングを有効にすると、TypeScriptクライアントコードはJavaScriptの標準的な命名規則に従い、@@map('table_name') と @map('column_name') により既存のSQLデータベース構造を一切変更せずに利用できます。

同一テーブルを参照する複数の外部キーには明示的なリレーション名を付与する

1つのテーブルが同じ親テーブルに対して複数の外部キーを持つ場合(例:author_id と reviewer_id が共に users を参照)、@relation('PostAuthor', fields: [authorId], references: [id]) のようにリレーション名を明示的に定義してPrismaのP1012検証エラーを回避します。

複合主キーと複合インデックスを @@id および @@unique にマッピングする

PRIMARY KEY (user_id, organization_id) などの複合主キーはモデルレベルの @@id([userId, organizationId]) に変換し、複合インデックスは @@index([fieldA, fieldB]) として出力して正確なインデックス構造を反映させます。

よくあるトラブルと解決策

Prismaスキーマ検証エラー P1012: 'リレーションフィールドの解析に失敗したか、対向する逆参照フィールドが存在しません'

Prismaのリレーション定義は双方のモデルに対向する逆参照フィールドを必要とします。パーサーが双方向リレーションを自動構築できるよう、関連するすべての CREATE TABLE 文を同時に入力DDLに含めてください。

未サポートまたは方言固有の列型(GEOMETRY、TSVECTOR、特殊な拡張型など)の扱い

Prisma標準スカラーに直接マッピングできない方言固有の型には Unsupported('type_name') 構文を使用します。必要に応じて Unsupported 型として保持するか、Bytes や String 型にマッピングを変更してください。

よくある質問 (FAQ)

SQLの外部キー制約はPrismaのリレーションにどのようにマッピングされますか?▼

FOREIGN KEY (author_id) REFERENCES users(id) 句を検出すると、スカラーフィールド(authorId Int @map('author_id'))と仮想リレーションフィールド(author User @relation(fields: [authorId], references: [id]))を生成し、参照先Userモデル側にも逆参照フィールド(posts Post[])を自動追加します。

公式の `prisma db pull`(イントロスペクション)コマンドとの違いは何ですか?▼

`prisma db pull` は稼働中のデータベースへのネットワーク接続と認証情報を必要とします。本ツールは純粋なクライアントサイドで動作し、SQL DDLマイグレーションファイルからブラウザ内で直接Prismaスキーマを生成するため、DB接続や権限が不要です。

複合主キーや複数カラムのユニーク制約はどのように変換されますか?▼

PRIMARY KEY (col1, col2) はモデルレベルの @@id([col1, col2]) に変換され、複数カラムの一意制約は @@unique([col1, col2])、複合セカンダリインデックスは @@index([col1, col2]) としてPrismaスキーマへ正確に反映されます。

SQLのDEFAULT値やAUTO_INCREMENTシーケンスはサポートされていますか?▼

はい。MySQLの AUTO_INCREMENT や PostgreSQL の SERIAL / IDENTITY は @default(autoincrement()) に、DEFAULT CURRENT_TIMESTAMP は @default(now()) に、数値・文字列・真偽値などのリテラル値は適切な Prisma の @default(...) 属性に変換されます。

関連するおすすめ開発ツール

すべてのツール →
Docker Run to Docker Compose 変換 (CLI to YAML) 開発者ガイドdeveloper

docker run コマンドのオプションフラグ、ボリュームマウント、ポートバインド、環境変数を本番運用可能なクリーンな docker-compose.yml サービス定義へ高精度に自動変換します。

ツールを開く→
Nginx Upstream・ロードバランシング設定ジェネレーター 開発者ガイドdeveloper

ラウンドロビン、least_conn、ip_hash、キープアライブ、パッシブヘルスチェックパラメータを備えた本番環境対応のNginx upstreamブロックを生成します。

ツールを開く→
Cron から Kubernetes CronJob YAML 変換&スペックジェネレーター 開発者ガイドdeveloper

標準的な crontab スケジュール式を、restartPolicy、concurrencyPolicy、リソース制限、タイムゾーン対応を備えた本番仕様の Kubernetes CronJob マニフェストへ瞬時に変換します。

ツールを開く→
JSONからGraphQL SDLスキーマ生成(Types・Queries・Inputs)開発者ガイドdeveloper

JSONオブジェクトからGraphQLスキーマ定義言語(SDL)のオブジェクト型、Input型、Queryスキーマを即時生成します。

ツールを開く→
Prometheus アラートルール&レコーディングルール生成ツール (PromQL) 開発者ガイドdeveloper

PromQLアラートルール、レコーディングルール、アラートしきい値、ラベル、Runbookアノテーションを視覚的に構築・検証します。

ツールを開く→
GraphQL SDLからTypeScriptリゾルバー型生成ツール 開発者ガイドdeveloper

GraphQL SDL(スキーマ定義言語)から、完全な型安全性を備えたTypeScriptリゾルバーインターフェース、引数型、コンテキスト型を自動生成します。

ツールを開く→