Prisma EnumからSQL CREATE TYPEとENUMへの変換

Prisma enum定義をPostgreSQLのCREATE TYPE、MySQLのインラインENUM、SQLiteのCHECK制約に変換します。ダイアレクト固有のenum処理を学びます。

Advanced

詳細な説明

ダイアレクト別のEnum変換

Prismaのenumはフィールドに許可される値のセットを定義する方法です。各SQLダイアレクトはenumを異なる方法で処理し、変換ツールは各ダイアレクトに正しい構文を生成します。

Prismaスキーマの例

enum Status {
  DRAFT
  PUBLISHED
  ARCHIVED
}

model Article {
  id     Int    @id @default(autoincrement())
  title  String
  status Status @default(DRAFT)

  @@map("articles")
}

PostgreSQLの出力

CREATE TYPE status AS ENUM (
  'DRAFT',
  'PUBLISHED',
  'ARCHIVED'
);

CREATE TABLE articles (
  id SERIAL PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  status status NOT NULL DEFAULT 'DRAFT'
);

PostgreSQLには真の列挙型を作成するネイティブのCREATE TYPE ... AS ENUM機能があります。カラム型はこの名前付き型を参照します。

MySQLの出力

CREATE TABLE articles (
  id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  status ENUM('DRAFT', 'PUBLISHED', 'ARCHIVED') NOT NULL DEFAULT 'DRAFT'
);

MySQLはインラインのENUM(...)カラム型を使用します。許可される値はカラム定義に直接リストされます。

SQLiteの出力

CREATE TABLE articles (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  title VARCHAR(255) NOT NULL,
  status TEXT NOT NULL DEFAULT 'DRAFT',
  CHECK (status IN ('DRAFT', 'PUBLISHED', 'ARCHIVED'))
);

SQLiteにはネイティブのenum型がありません。変換ツールは許可される値を強制するためにTEXTカラムとCHECK制約を使用します。

複数のEnum

必要な数のenumを定義できます。各enumは独自のCREATE TYPE(PostgreSQL)を生成するか、インライン(MySQL/SQLite)で使用されます。Enum名はテーブル名と同じsnake_case変換規則に従います。

ユースケース

記事がドラフト-公開-アーカイブのライフサイクルを経るコンテンツ管理システムを構築しており、3つのサポート対象データベースエンジンすべてでデータベースが有効なステータス値を強制するようにする必要があります。

試してみる — Prisma to SQL Schema

フルツールを開く