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つのサポート対象データベースエンジンすべてでデータベースが有効なステータス値を強制するようにする必要があります。