Prisma スキーマ → SQL DDL 移行ジェネレーター

Prisma スキーマ → SQL DDL 移行ジェネレーター

Prismaスキーマ(.prisma)からPostgreSQL、MySQL、SQLite向けSQL DDLマイグレーションスクリプトへの変換ガイド。

プリセット:
対象 SQL 方言:
Prisma スキーマ定義(4 モデル, 2 列挙型)
-- ============================================================================
-- ToolsAA Prisma to SQL DDL Generator
-- Target Dialect: POSTGRESQL
-- Generated via ToolsAA Prisma-to-SQL Engine
-- 100% Pure Client-Side Browser Compilation
-- ============================================================================

-- ----------------------------------------------------------------------------
-- Drop Existing Tables
-- ----------------------------------------------------------------------------
DROP TABLE IF EXISTS "user_sessions" CASCADE;
DROP TABLE IF EXISTS "memberships" CASCADE;
DROP TABLE IF EXISTS "users" CASCADE;
DROP TABLE IF EXISTS "organizations" CASCADE;

-- ----------------------------------------------------------------------------
-- Custom Enum Types
-- ----------------------------------------------------------------------------
DROP TYPE IF EXISTS "Role";
CREATE TYPE "Role" AS ENUM ('SUPERADMIN', 'ADMIN', 'MEMBER', 'VIEWER');
DROP TYPE IF EXISTS "MemberStatus";
CREATE TYPE "MemberStatus" AS ENUM ('INVITED', 'ACTIVE', 'SUSPENDED');

-- ----------------------------------------------------------------------------
-- Table Definitions
-- ----------------------------------------------------------------------------
CREATE TABLE "organizations" (
  "id" UUID NOT NULL DEFAULT 'uuid(',
  "name" VARCHAR(128) NOT NULL,
  "slug" VARCHAR(64) NOT NULL UNIQUE,
  "domain" VARCHAR(128),
  "createdAt" TIMESTAMPTZ NOT NULL DEFAULT 'now(',
  "updatedAt" TIMESTAMPTZ NOT NULL,
  PRIMARY KEY ("id")
);

CREATE TABLE "users" (
  "id" UUID NOT NULL DEFAULT 'uuid(',
  "email" VARCHAR(255) NOT NULL UNIQUE,
  "fullName" VARCHAR(128) NOT NULL,
  "avatarUrl" VARCHAR(512),
  "emailVerified" TIMESTAMPTZ,
  "isActive" BOOLEAN NOT NULL DEFAULT true,
  "createdAt" TIMESTAMPTZ NOT NULL DEFAULT 'now(',
  "updatedAt" TIMESTAMPTZ NOT NULL,
  PRIMARY KEY ("id")
);

CREATE TABLE "memberships" (
  "id" UUID NOT NULL DEFAULT 'uuid(',
  "organizationId" UUID NOT NULL,
  "userId" UUID NOT NULL,
  "role" "Role" NOT NULL DEFAULT 'MEMBER',
  "status" "MemberStatus" NOT NULL DEFAULT 'ACTIVE',
  "joinedAt" TIMESTAMPTZ NOT NULL DEFAULT 'now(',
  PRIMARY KEY ("id"),
  UNIQUE ("organizationId", "userId")
);

CREATE TABLE "user_sessions" (
  "id" UUID NOT NULL DEFAULT 'uuid(',
  "sessionToken" VARCHAR(255) NOT NULL UNIQUE,
  "userId" UUID NOT NULL,
  "ipAddress" VARCHAR(45),
  "userAgent" VARCHAR(512),
  "expiresAt" TIMESTAMPTZ NOT NULL,
  "createdAt" TIMESTAMPTZ NOT NULL DEFAULT 'now(',
  PRIMARY KEY ("id")
);

-- ----------------------------------------------------------------------------
-- Foreign Key Constraints
-- ----------------------------------------------------------------------------
ALTER TABLE "memberships" ADD CONSTRAINT fk_memberships_organizationId FOREIGN KEY ("organizationId") REFERENCES "organizations"("id") ON DELETE CASCADE;
ALTER TABLE "memberships" ADD CONSTRAINT fk_memberships_userId FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE;
ALTER TABLE "user_sessions" ADD CONSTRAINT fk_user_sessions_userId FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE;

-- ----------------------------------------------------------------------------
-- Secondary Indexes
-- ----------------------------------------------------------------------------
CREATE INDEX "idx_memberships_userId" ON "memberships" ("userId");
CREATE INDEX "idx_user_sessions_userId_expiresAt" ON "user_sessions" ("userId", "expiresAt");
4
解析済みモデル数
27
カラム・属性数
100%
実行可能 SQL 準備完了

瞬時スキーマコンパイル

Prisma モデル、複合キー、リレーション、ネイティブ型をブラウザメモリ内で瞬時に解析し、高速に変換します。

完全ローカル・プライバシー保護

データベーススキーマや機密テーブル構造は外部サーバーに一切送信されません。すべてブラウザ内で安全に完結。

複数 SQL 方言対応

PostgreSQL、MySQL、SQLite、SQL Server それぞれに最適化された正確なデータ型と制約を出力します。

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

Prisma スキーマ → SQL DDL 移行ジェネレーター — リファレンスガイド

Prismaスキーマ(.prisma)からPostgreSQL、MySQL、SQLite向けSQL DDLマイグレーションスクリプトへの変換ガイド。

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

dialectSqlDialect (postgresql | mysql | sqlite | sqlserver)

データ型マッピング、識別子のクォート記号、およびEnum生成戦略を制御する対象SQLダイアレクトを指定します。

初期値: postgresql
dropTableIfExistsboolean

テーブル作成前に DROP TABLE IF EXISTS(PostgreSQLでは DROP TYPE も含む)を挿入し、再実行可能なマイグレーションを作成します。

初期値: true
includeForeignKeysboolean

Prisma の @relation 定義から FOREIGN KEY 制約を生成し、onDelete や onUpdate の参照アクションをSQLに出力します。

初期値: true
separateAlterFkboolean

外部キー制約をインラインではなく末尾の ALTER TABLE 文として分離出力し、相互循環参照による作成エラーを防ぎます。

初期値: true
includeIndexesboolean

Prisma モデル内の @@index および複合 @@unique 属性から明示的な CREATE INDEX / CREATE UNIQUE INDEX 文を出力します。

初期値: true
quoteIdentifiersboolean

テーブル名、カラム名、制約名を各DB固有のクォート記号で囲み、予約語との意図しない衝突を防止します。

初期値: true

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

ALTER文で外部キー循環を防止

ユーザーとチームの相互参照など、循環依存を含むスキーマでは separateAlterFk を有効化してください。すべてのテーブル生成完了後に外部キー制約を追加することで、テーブル作成順序に起因する依存性エラーを回避できます。

CUIDやNanoIDのDB代替設定

Prisma の @default(cuid()) や nanoid() は JavaScript ランタイム側で評価されるため SQL の DEFAULT 句が存在しません。DB 側で採番する場合は @default(uuid()) を指定して gen_random_uuid() 等へ切り替えるか、VARCHAR(30) としてアプリ層で生成してください。

@db属性で正確な型を強制定義

Prisma の汎用 String や DateTime 型は TEXT や TIMESTAMP にマップされます。@db.VarChar(255) や @db.Timestamptz、@db.Decimal(12, 2) をスキーマに付与することで、データベースエンジンに最適化された正確な DDL を生成できます。

PostgreSQL用トリガーの併用

MySQL は ON UPDATE CURRENT_TIMESTAMP で @updatedAt を処理できますが、PostgreSQL は手続き型トリガーが必要です。出力 DDL と併せて BEFORE UPDATE で更新時刻を自動設定する PL/pgSQL トリガー関数を定義してください。

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

未作成テーブル参照により外部キー作成時に relation does not exist エラーが発生する

インライン外部キー制約がスクリプトの後方にある未定義テーブルを参照している場合に発生します。separateAlterFk を有効化してテーブル定義と制約の追加を分離してください。

PostgreSQL マイグレーションの再実行時に type already exists エラーで失敗する

dropTableIfExists を有効にして DROP TYPE IF EXISTS を先頭に出力するか、DO $$ BEGIN ... EXCEPTION WHEN duplicate_object THEN null; END $$ 構文で Enum 作成を防御的にラップしてください。

SQLite 環境で ALTER TABLE ADD CONSTRAINT FOREIGN KEY 構文エラーが発生する

SQLite は既存テーブルへの後付け外部キー制約追加をサポートしていません。SQLite ターゲット時は CREATE TABLE 内部にインラインで制約を宣言するか、一時テーブルを用いたマイグレーションを行ってください。

よくある質問 (FAQ)

生成された SQL DDL は Prisma CLI を使わずに本番 CI/CD パイプラインで直接実行できますか?▼

はい。生成される SQL は完全自己完結型の標準 DDL 文であり、Flyway、Liquibase、golang-migrate、psql、mysql などの各種マイグレーションツールや CLI から直接安全に実行できます。

Prisma の暗黙的多対多(Implicit m:n)リレーションはどのような SQL 構造に変換されますか?▼

明示的な中間モデルを介さずに対多対リストが定義されている場合、コンパイラは Prisma 標準仕様に準拠した _ModelAToModelB 形式の中間テーブル、複合主キー、およびカスケード外部キー制約を自動合成します。

スキーマ定義やデータベース接続情報が外部サーバーへ送信されることはありますか?▼

一切ありません。Prisma AST のパース、リレーション解決、および SQL 出力はすべて WebAssembly と JavaScript を介してブラウザのローカルメモリ上で 100% 完結して実行されます。

複合主キー (@@id) や複合ユニーク制約 (@@unique) にはどの SQL 構文が割り当てられますか?▼

モデルレベルの @@id は PRIMARY KEY (col1, col2) 句に変換され、@@unique は選択された SQL ダイアレクトに応じて CREATE UNIQUE INDEX またはテーブルレベルの UNIQUE 制約としてレンダリングされます。

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

すべてのツール →
Prismaスキーマ TypeScript 型定義変換ガイド開発ツール

Prismaスキーマのmodelやenum、リレーションを解析し、Prisma Clientランタイム不要の純粋なTypeScript型定義(interface / type)を即時生成。

ツールを開く→
OpenAPI & SwaggerからAxios TypeScript APIクライアント生成開発ツール

OpenAPI 3.0およびSwaggerのJSON/YAML仕様書から、型安全で保守性の高いAxios HTTPクライアント関数とパラメータインターフェースを自動生成します。

ツールを開く→
OpenAPI・Swagger ネイティブFetchクライアント自動生成 開発者向け技術リファレンス開発ツール

依存関係ゼロの標準Fetch APIを活用したTypeScriptクライアントコードを生成。クエリ文字列のシリアライズ、ヘッダー設定、型定義を自動完結。

ツールを開く→
Drizzle ORM スキーマから SQL CREATE TABLE DDL 生成ツール開発ツール

Drizzle ORM の pgTable、mysqlTable、sqliteTable 定義を高精度に解析し、実行可能な SQL CREATE TABLE マイグレーションスクリプトへと変換します。

ツールを開く→
GitHub Actions CI/CD ワークフロー YAML 生成ガイド開発ツール

Node.js、Go、Python、Docker ビルド、ユニットテスト、自動リリースに対応した本番向け GitHub Actions ワークフロー YAML パイプラインを安全かつ迅速に構築します。

ツールを開く→
Linux Logrotate 設定ファイル生成ツール (保持期間 & 圧縮設定ガイド)開発ツール

日次・週次ローテーション、gzip圧縮、dateext、ファイルサイズ制限、postrotateスクリプトを含む本番環境用 /etc/logrotate.d/ 設定ファイルを安全に生成。

ツールを開く→