PrismaオプショナルフィールドからSQL Nullableカラムへの変換
Prismaのオプショナルフィールド(?マーク付き)がNOT NULL制約なしのnullable SQLカラムにどのように変換されるかを理解します。デフォルト値とNULL処理を解説します。
Field Types
詳細な説明
オプショナル(Nullable)フィールドの変換
Prismaでは、型に?サフィックスを付けるとフィールドがオプション(nullable)になります。これはSQLのデフォルト(NOT NULLが指定されない限りカラムはnullable)と逆です。
Prismaスキーマの例
model Employee {
id Int @id @default(autoincrement())
firstName String @map("first_name")
lastName String @map("last_name")
middleName String? @map("middle_name")
email String @unique
phone String?
bio String?
hireDate DateTime @map("hire_date")
termDate DateTime? @map("term_date")
@@map("employees")
}
生成されるSQL
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
middle_name VARCHAR(255),
email VARCHAR(255) NOT NULL UNIQUE,
phone VARCHAR(255),
bio VARCHAR(255),
hire_date TIMESTAMP NOT NULL,
term_date TIMESTAMP
);
マッピングルール
| Prisma | SQL |
|---|---|
String(必須) |
VARCHAR(255) NOT NULL |
String?(オプション) |
VARCHAR(255)(nullable) |
Int(必須) |
INTEGER NOT NULL |
Int?(オプション) |
INTEGER(nullable) |
この違いが重要な理由
- Prismaのデフォルト: フィールドは必須(non-nullable)。
?で明示的にnullabilityを選択する必要があります。 - SQLのデフォルト: カラムはnullable。
NOT NULLを明示的に追加して必須にする必要があります。
変換ツールはこの2つの規約を正しく変換し、必須のPrismaフィールドにNOT NULLを追加し、オプションフィールドでは省略します。
デフォルト値付きオプショナルフィールド
オプション性とデフォルト値を組み合わせることができます。例えば、status String? @default("active")はデフォルト値付きのnullableカラムを生成します:status VARCHAR(255) DEFAULT 'active'。新しい行はデフォルトで"active"になりますが、カラムは明示的にNULLに設定することもできます。
ユースケース
一部の個人情報(ミドルネーム、電話番号、退職日)がレコード作成時に利用できない可能性がある従業員データベースをモデリングしており、SQLスキーマがどのカラムがNULL値を受け入れるかを正しく反映する必要があります。