メインコンテンツへスキップ

Prismaスキーマのリファレンス

datasource

Prismaスキーマ内のデータソースを定義します。

フィールド

datasourceブロックは以下のフィールドを受け入れます

名前必須説明
providerはい文字列 (postgresql, mysql, sqlite, sqlserver, mongodb, cockroachdb)使用するデータソースコネクタを記述します。
urlはい文字列 (URL)認証情報を含む接続URL。ほとんどのコネクタは、データベースが提供する構文を使用します。
shadowDatabaseUrlいいえ文字列 (URL)Prisma Migrateが使用するシャドウデータベースへの接続URL。クラウドホスト型データベースをシャドウデータベースとして使用できます。
directUrlいいえ文字列 (URL)データベースへの直接接続用URL。

url引数でコネクションプーラーURL(例:Prisma AccelerateまたはpgBouncerを使用する場合)を使用する場合、データベースへの直接接続を必要とするPrisma CLIコマンドは、directUrl引数のURLを使用します。

directUrlプロパティはPrisma Studioバージョン5.1.0以降でサポートされています。

directUrlプロパティはPrisma Postgresデータベースを使用する際には不要です。
relationModeいいえ文字列 (foreignKeys, prisma)参照整合性をデータベースの外部キーで強制するか、Prisma Clientでエミュレートするかを設定します。

バージョン3.1.1以降でプレビュー中。このフィールドはバージョン4.5.0以降ではrelationModeと名付けられ、以前はreferentialIntegrityと名付けられていました。
extensionsいいえ文字列のリスト (PostgreSQL拡張機能名)スキーマにPostgreSQL拡張機能を表現することを可能にします。Prisma ORMバージョン4.5.0以降でPostgreSQLのみプレビューで利用可能です。

以下のプロバイダが利用可能です

備考

  • スキーマには**1つ**のdatasourceブロックのみを記述できます。
  • datasource dbは慣例ですが、データソースには任意の名前を付けることができます。例えば、datasource mysqldatasource dataなどです。

PostgreSQLデータソースを指定する

この例では、ターゲットデータベースは以下の認証情報で利用可能です

  • ユーザー: johndoe
  • パスワード: mypassword
  • ホスト: localhost
  • ポート: 5432
  • データベース名: mydb
  • スキーマ名: public
datasource db {
provider = "postgresql"
url = "postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public"
}

PostgreSQL接続文字列の詳細についてはこちらをご覧ください。

環境変数を使用してPostgreSQLデータソースを指定する

この例では、ターゲットデータベースは以下の認証情報で利用可能です

  • ユーザー: johndoe
  • パスワード: mypassword
  • ホスト: localhost
  • ポート: 5432
  • データベース名: mydb
  • スキーマ名: public
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

データベース接続URLを必要とするPrisma CLIコマンド(例:prisma generate)を実行する場合、DATABASE_URL環境変数が設定されていることを確認する必要があります。

その1つの方法は、以下の内容の.envファイルを作成することです。Prisma CLIによって自動的に認識されるためには、ファイルがschema.prismaファイルと同じディレクトリにある必要があることに注意してください。

DATABASE_URL=postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public

MySQLデータソースを指定する

この例では、ターゲットデータベースは以下の認証情報で利用可能です

  • ユーザー: johndoe
  • パスワード: mypassword
  • ホスト: localhost
  • ポート: 3306
  • データベース名: mydb
datasource db {
provider = "mysql"
url = "mysql://johndoe:mypassword@localhost:3306/mydb"
}

MySQL接続文字列の詳細についてはこちらをご覧ください。

MongoDBデータソースを指定する

  • ユーザー: root
  • パスワード: password
  • ホスト: cluster1.test1.mongodb.net
  • ポート: N/A
  • データベース名: testing
datasource db {
provider = "mongodb"
url = "mongodb+srv://root:password@cluster1.test1.mongodb.net/testing?retryWrites=true&w=majority"
}

MongoDB接続文字列の詳細についてはこちらをご覧ください。

SQLiteデータソースを指定する

この例では、ターゲットデータベースはdev.dbというファイルにあります

datasource db {
provider = "sqlite"
url = "file:./dev.db"
}

SQLite接続文字列の詳細についてはこちらをご覧ください。

CockroachDBデータソースを指定する

この例では、ターゲットデータベースは以下の認証情報で利用可能です

  • ユーザー: johndoe
  • パスワード: mypassword
  • ホスト: localhost
  • ポート: 26257
  • データベース名: mydb
  • スキーマ名: public
datasource db {
provider = "cockroachdb"
url = "postgresql://johndoe:mypassword@localhost:26257/mydb?schema=public"
}

接続文字列の形式はPostgreSQLと同じです。PostgreSQL接続文字列の詳細についてはこちらをご覧ください。

generator

Prismaスキーマ内のジェネレータを定義します。

prisma-client-jsプロバイダのフィールド

generatorブロックは以下のフィールドを受け入れます

名前必須説明
providerはい文字列 (ファイルパス) またはprisma-client-js使用するジェネレータを記述します。これはジェネレータを実装するファイルを指すか、組み込みのジェネレータを直接指定することができます。
outputいいえ*文字列 (ファイルパス)生成されたクライアントの場所を決定します。詳細はこちらデフォルト: node_modules/.prisma/client
previewFeaturesいいえEnumのリスト現在利用可能なプレビュー機能のリストを見るには、インテリセンスを使用してください(Visual Studio CodeでCtrl+Space)。デフォルト: なし
engineTypeいいえEnum (library または binary)ダウンロードして使用するクエリエンジンのタイプを定義します。デフォルト: library
binaryTargetsいいえEnumのリスト (下記参照)クエリエンジンとの互換性を確保するために、Prisma Clientが実行されるOSを指定します。デフォルト: native
moduleFormatいいえEnum (cjs または esm)生成されたPrisma Clientのモジュール形式を定義します。このフィールドはprisma-clientジェネレータでのみ利用可能です。
重要

カスタム出力パスを定義し、そのパスを.gitignoreに追加し、その後カスタムビルドスクリプトまたはpostinstallフックを介してprisma generateが実行されるようにすることをお勧めします。

prisma-clientプロバイダのフィールド (早期アクセス)

generatorブロックは以下のフィールドを受け入れます

名前必須説明
providerはい文字列 (ファイルパス) またはprisma-client使用するジェネレータを記述します。これはジェネレータを実装するファイルを指すか、組み込みのジェネレータを直接指定することができます。
outputはい文字列 (ファイルパス)生成されたクライアントの場所を決定します。詳細はこちら
previewFeaturesいいえEnumのリスト現在利用可能なプレビュー機能のリストを見るには、インテリセンスを使用してください(Visual Studio CodeでCtrl+Space)。デフォルト: なし
runtimeいいえEnum (nodejs (エイリアスnode), deno, bun, deno-deploy, workerd (エイリアスcloudflare), edge-light (エイリアスvercel), react-native)ターゲットランタイム環境。デフォルト: nodejs
moduleFormatいいえEnum (esm または cjs)生成されたコードがESM(importを使用)またはCommonJS(require(...)を使用)モジュールをサポートするかどうかを決定します。cjsを使用する正当な理由がない限り、常にesmを推奨します。デフォルト: 環境から推論されます。
generatedFileExtensionいいえEnum (ts または mts または cts)生成されたTypeScriptファイルのファイル拡張子。デフォルト: ts
importFileExtensionいいえEnum (ts,mts,cts,js,mjs,cjs, 空 (bare imports用))import文で使用されるファイル拡張子。デフォルト: 環境から推論されます。

binaryTargets オプション

以下の表は、binaryTargetsで指定するプラットフォーム名とともに、サポートされるすべてのオペレーティングシステムをリストしています。

特に指定がない限り、デフォルトでサポートされるCPUアーキテクチャはx86_64です。

macOS
ビルドOSPrismaエンジンビルド名
macOS Intel x86_64darwin
macOS ARM64darwin-arm64
Windows
ビルドOSPrismaエンジンビルド名
Windowswindows
Linux (x86_64アーキテクチャ上のAlpine)
ビルドOSPrismaエンジンビルド名OpenSSL
Alpine (3.17以降)linux-musl-openssl-3.0.x*3.0.x
Alpine (3.16以前)linux-musl1.1.x

* Prisma ORMバージョン4.8.0以降で利用可能です。

Linux (ARM64アーキテクチャ上のAlpine)
ビルドOSPrismaエンジンビルド名OpenSSL
Alpine (3.17以降)linux-musl-arm64-openssl-3.0.x*3.0.x
Alpine (3.16以前)linux-musl-arm64-openssl-1.1.x*1.1.x

* Prisma ORMバージョン4.10.0以降で利用可能です。

Linux (Debian), x86_64
ビルドOSPrismaエンジンビルド名OpenSSL
Debian 8 (Jessie)debian-openssl-1.0.x1.0.x
Debian 9 (Stretch)debian-openssl-1.1.x1.1.x
Debian 10 (Buster)debian-openssl-1.1.x1.1.x
Debian 11 (Bullseye)debian-openssl-1.1.x1.1.x
Debian 12 (Bookworm)debian-openssl-3.0.x3.0.x
Linux (Ubuntu), x86_64
ビルドOSPrismaエンジンビルド名OpenSSL
Ubuntu 14.04 (trusty)debian-openssl-1.0.x1.0.x
Ubuntu 16.04 (xenial)debian-openssl-1.0.x1.0.x
Ubuntu 18.04 (bionic)debian-openssl-1.1.x1.1.x
Ubuntu 19.04 (disco)debian-openssl-1.1.x1.1.x
Ubuntu 20.04 (focal)debian-openssl-1.1.x1.1.x
Ubuntu 21.04 (hirsute)debian-openssl-1.1.x1.1.x
Ubuntu 22.04 (jammy)debian-openssl-3.0.x3.0.x
Ubuntu 23.04 (lunar)debian-openssl-3.0.x3.0.x
Linux (CentOS), x86_64
ビルドOSPrismaエンジンビルド名OpenSSL
CentOS 7rhel-openssl-1.0.x1.0.x
CentOS 8rhel-openssl-1.1.x1.1.x
Linux (Fedora), x86_64
ビルドOSPrismaエンジンビルド名OpenSSL
Fedora 28rhel-openssl-1.1.x1.1.x
Fedora 29rhel-openssl-1.1.x1.1.x
Fedora 30rhel-openssl-1.1.x1.1.x
Fedora 36rhel-openssl-3.0.x3.0.x
Fedora 37rhel-openssl-3.0.x3.0.x
Fedora 38rhel-openssl-3.0.x3.0.x
Linux (Linux Mint), x86_64
ビルドOSPrismaエンジンビルド名OpenSSL
Linux Mint 18debian-openssl-1.0.x1.0.x
Linux Mint 19debian-openssl-1.1.x1.1.x
Linux Mint 20debian-openssl-1.1.x1.1.x
Linux Mint 21debian-openssl-3.0.x3.0.x
Linux (Arch Linux), x86_64
ビルドOSPrismaエンジンビルド名OpenSSL
Arch Linux 2019.09.01debian-openssl-1.1.x1.1.x
Arch Linux 2023.04.23debian-openssl-3.0.x3.0.x
Linux ARM64 (Alpineを除くすべての主要ディストリビューション)
ビルドOSPrismaエンジンビルド名OpenSSL
Linux ARM64 glibcベースのディストリビューションlinux-arm64-openssl-1.0.x1.0.x
Linux ARM64 glibcベースのディストリビューションlinux-arm64-openssl-1.1.x1.1.x
Linux ARM64 glibcベースのディストリビューションlinux-arm64-openssl-3.0.x3.0.x

prisma-client-jsジェネレータをデフォルトのoutputpreviewFeaturesengineTypebinaryTargetsで指定する

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

上記のgenerator定義は、outputengineTypebinaryTargets(および暗黙的にpreviewFeatures)にデフォルト値を使用するため、以下と**同等**であることに注意してください

generator client {
provider = "prisma-client-js"
output = "node_modules/.prisma/client"
engineType = "library"
binaryTargets = ["native"]
}

Prisma Clientのカスタムoutput場所を指定する

この例では、生成されたアセットのカスタムoutput場所を定義して、デフォルトのものを上書きする方法を示します。

generator client {
provider = "prisma-client-js"
output = "../src/generated/client"
}

OSとの互換性を確保するためにカスタムbinaryTargetsを指定する

この例では、上記の表に基づいて、Prisma ClientをUbuntu 19.04 (disco)で実行するように設定する方法を示します。

generator client {
provider = "prisma-client-js"
binaryTargets = ["debian-openssl-1.1.x"]
}

カスタムジェネレータ実装を指すproviderを指定する

この例では、my-generatorというディレクトリにあるカスタムジェネレータを使用する方法を示します。

generator client {
provider = "./my-generator"
}

model

Prismaのモデルを定義します。

備考

  • モデルのすべてのレコードは**一意に**識別可能である必要があります。モデルごとに以下の属性の**少なくとも1つ**を定義する必要があります

命名規則

  • モデル名は次の正規表現に従う必要があります: [A-Za-z][A-Za-z0-9_]*
  • モデル名は文字で始まる必要があり、通常はPascalCaseで記述されます
  • モデル名には単数形を使用する必要があります(例:userusersUsersではなくUser
  • Prisma ORMには、Prisma ORM内部で使用される多数の**予約語**があり、モデル名として使用することはできません。予約語はこちらこちらで確認できます。

: @@map属性を使用すると、モデル(例:User)を、モデルの命名規則に一致しない異なる名前のテーブル(例:users)にマッピングできます。

フィールドの順序

  • バージョン2.3.0以降では、イントロスペクションはモデルフィールドをデータベース内の対応するカラムと同じ順序でリストします。リレーションフィールドはスカラーフィールドの後にリストされます。

2つのスカラーフィールドを持つUserという名前のモデル

model User {
email String @unique // `email` can not be optional because it's the only unique field on the model
name String?
}

model フィールド

フィールドはモデルのプロパティです。

備考

命名規則

  • 文字で始まる必要があります
  • 通常はcamelCaseで記述されます
  • 次の正規表現に従う必要があります: [A-Za-z][A-Za-z0-9_]*

: @map属性を使用すると、フィールド名を、フィールドの命名規則に一致しない異なる名前のカラムにマッピングできます。例:myField @map("my_field")

model フィールド スカラー型

データソースコネクタは、Prisma ORMのスカラー型のそれぞれがどのネイティブデータベース型にマッピングされるかを決定します。同様に、ジェネレータは、これらの型のそれぞれがターゲットプログラミング言語のどの型にマッピングされるかを決定します。

Prismaモデルには、モデル間のリレーションを定義するモデルフィールド型もあります。

String

可変長テキスト。

デフォルトの型マッピング

コネクタデフォルトのマッピング
PostgreSQLtext
SQL Servernvarchar(1000)
MySQLvarchar(191)
MongoDBString
SQLiteTEXT
CockroachDBSTRING

PostgreSQL

ネイティブデータベース型ネイティブデータベース型属性注釈
text@db.Text
char(x)@db.Char(x)
varchar(x)@db.VarChar(x)
bit(x)@db.Bit(x)
varbit@db.VarBit
uuid@db.Uuid
xml@db.Xml
inet@db.Inet
citext@db.CitextCitext拡張機能が有効になっている場合にのみ利用可能です。

MySQL

ネイティブデータベース型ネイティブデータベース型属性
VARCHAR(x)@db.VarChar(x)
TEXT@db.Text
CHAR(x)@db.Char(x)
TINYTEXT@db.TinyText
MEDIUMTEXT@db.MediumText
LONGTEXT@db.LongText

Prisma Migrateを使用して、@db.Bit(1)Stringにマッピングできます。

model Model {
/* ... */
myField String @db.Bit(1)
}

MongoDB

String

ネイティブデータベース型属性注釈
@db.String
@db.ObjectId基になるBSON型がOBJECT_IDの場合(IDフィールド、リレーションスカラー)は必須です

Microsoft SQL Server

ネイティブデータベース型ネイティブデータベース型属性
char(x)@db.Char(x)
nchar(x)@db.NChar(x)
varchar(x)@db.VarChar(x)
nvarchar(x)@db.NVarChar(x)
text@db.Text
ntext@db.NText
xml@db.Xml
uniqueidentifier@db.UniqueIdentifier

SQLite

TEXT

CockroachDB

ネイティブデータベース型ネイティブデータベース型属性注釈
STRING(x) | TEXT(x) | VARCHAR(x)@db.String(x)
CHAR(x)@db.Char(x)
char@db.CatalogSingleChar
BIT(x)@db.Bit(x)
VARBIT@db.VarBit
UUID@db.Uuid
INET@db.Inet

PostgreSQLでサポートされているxmlおよびcitext型は、現在CockroachDBではサポートされていません。

クライアント

Prisma Client JS
string

Boolean

真または偽の値。

デフォルトの型マッピング

コネクタデフォルトのマッピング
PostgreSQLboolean
SQL Serverbit
MySQLTINYINT(1)
MongoDBBool
SQLiteINTEGER
CockroachDBBOOL

PostgreSQL

ネイティブデータベース型ネイティブデータベース型属性注釈
boolean@db.Boolean

MySQL

ネイティブデータベース型ネイティブデータベース型属性注釈
TINYINT(1)@db.TinyInt(1)TINYINTは、最大長が1より大きい場合(例:TINYINT(2)またはデフォルト値が10NULL以外のいずれかである場合、Intにマッピングされます
BIT(1)@db.Bit

MongoDB

Bool

Microsoft SQL Server

ネイティブデータベース型ネイティブデータベース型属性注釈
bit@db.Bit

SQLite

INTEGER

CockroachDB

ネイティブデータベース型ネイティブデータベース型属性注釈
BOOL@db.Bool

クライアント

Prisma Client JS
boolean

Int

デフォルトの型マッピング

コネクタデフォルトのマッピング
PostgreSQLinteger
SQL Serverint
MySQLINT
MongoDBInt
SQLiteINTEGER
CockroachDBINT

PostgreSQL

ネイティブデータベース型ネイティブデータベース型属性注釈
integer | int, int4@db.Integer
smallint | int2@db.SmallInt
smallserial | serial2@db.SmallInt @default(autoincrement())
serial | serial4@db.Int @default(autoincrement())
oid@db.Oid

MySQL

ネイティブデータベース型ネイティブデータベース型属性注釈
INT@db.Int
INT UNSIGNED@db.UnsignedInt
SMALLINT@db.SmallInt
SMALLINT UNSIGNED@db.UnsignedSmallInt
MEDIUMINT@db.MediumInt
MEDIUMINT UNSIGNED@db.UnsignedMediumInt
TINYINT@db.TinyIntTINYINTは、最大長が1より大きい場合(例:TINYINT(2)またはデフォルト値が10NULL以外のいずれかである場合、Intにマッピングされます。TINYINT(1)Booleanにマッピングされます。
TINYINT UNSIGNED@db.UnsignedTinyIntTINYINT(1) UNSIGNEDBooleanではなくIntにマッピングされます
YEAR@db.Year

MongoDB

Int

ネイティブデータベース型属性注釈
@db.Int
@db.Long

Microsoft SQL Server

ネイティブデータベース型ネイティブデータベース型属性注釈
int@db.Int
smallint@db.SmallInt
tinyint@db.TinyInt
bit@db.Bit

SQLite

INTEGER

CockroachDB

ネイティブデータベース型ネイティブデータベース型属性注釈
INTEGER | INT | INT8@db.Int8これはPostgreSQLとは異なります。PostgreSQLでは、integerintint4のエイリアスであり、@db.Integerにマッピングされます。
INT4@db.Int4
INT2 | SMALLINT@db.Int2
SMALLSERIAL | SERIAL2@db.Int2 @default(autoincrement())
SERIAL | SERIAL4@db.Int4 @default(autoincrement())
SERIAL8 | BIGSERIAL@db.Int8 @default(autoincrement())

クライアント

Prisma Client JS
number

BigInt

BigIntはバージョン2.17.0以降で利用可能です。

デフォルトの型マッピング

コネクタデフォルトのマッピング
PostgreSQLbigint
SQL Serverint
MySQLBIGINT
MongoDBLong
SQLiteINTEGER
CockroachDBINTEGER

PostgreSQL

ネイティブデータベース型ネイティブデータベース型属性注釈
bigint | int8@db.BigInt
bigserial | serial8@db.BigInt @default(autoincrement())

MySQL

ネイティブデータベース型ネイティブデータベース型属性注釈
BIGINT@db.BigInt
SERIAL@db.UnsignedBigInt @default(autoincrement())

MongoDB

Long

Microsoft SQL Server

ネイティブデータベース型ネイティブデータベース型属性注釈
bigint@db.BigInt

SQLite

INTEGER

CockroachDB

ネイティブデータベース型ネイティブデータベース型属性注釈
BIGINT | INT | INT8@db.Int8これはPostgreSQLとは異なります。PostgreSQLでは、intint4のエイリアスです。
bigserial | serial8@db.Int8 @default(autoincrement())

クライアント

クライアント説明
Prisma Client JSBigIntBigIntの操作例を参照してください。

Float

浮動小数点数。

Floatはバージョン2.17.0以降でDoubleにマッピングされます。この変更の詳細については、リリースノートおよびビデオ: Prisma ORM 2.17.0でのFloatのデフォルトマッピングの変更を参照してください。

デフォルトの型マッピング

コネクタデフォルトのマッピング
PostgreSQLdouble precision
SQL Serverfloat(53)
MySQLDOUBLE
MongoDBDouble
SQLiteREAL
CockroachDBDOUBLE PRECISION

PostgreSQL

ネイティブデータベース型ネイティブデータベース型属性注釈
double precision@db.DoublePrecision
real@db.Real

MySQL

ネイティブデータベース型ネイティブデータベース型属性注釈
FLOAT@db.Float
DOUBLE@db.Double

MongoDB

Double

Microsoft SQL Server

ネイティブデータベース型ネイティブデータベース型属性
float@db.Float
money@db.Money
smallmoney@db.SmallMoney
real@db.Real

SQLiteコネクタ

REAL

CockroachDB

ネイティブデータベース型ネイティブデータベース型属性注釈
DOUBLE PRECISION | FLOAT8@db.Float8
REAL | FLOAT4 | FLOAT@db.Float4

クライアント

Prisma Client JS
number

Decimal

デフォルトの型マッピング

コネクタデフォルトのマッピング
PostgreSQLdecimal(65,30)
SQL Serverdecimal(32,16)
MySQLDECIMAL(65,30)
MongoDBサポートされていません
SQLiteDECIMAL
CockroachDBDECIMAL

PostgreSQL

ネイティブデータベース型ネイティブデータベース型属性注釈
decimal | numeric@db.Decimal(p, s)
money@db.Money
  • p (精度) は、保存される小数点以下の最大桁数です。s (スケール) は、小数点以下の桁数です。

MySQL

ネイティブデータベース型ネイティブデータベース型属性注釈
DECIMAL | NUMERIC@db.Decimal(p, s)
  • p (精度) は、保存される小数点以下の最大桁数です。s (スケール) は、小数点以下の桁数です。

MongoDB

サポートされていません.

Microsoft SQL Server

ネイティブデータベース型ネイティブデータベース型属性注釈
decimal | numeric@db.Decimal(p, s)
  • p (精度) は、保存される小数点以下の最大桁数です。s (スケール) は、小数点以下の桁数です。

SQLite

DECIMAL (2.17.0でREALから変更)

CockroachDB

ネイティブデータベース型ネイティブデータベース型属性注釈
DECIMAL | DEC | NUMERIC@db.Decimal(p, s)
moneyまだ対応していませんPostgreSQLのmoney型は、CockroachDBではまだサポートされていません
  • p (精度) は、保存される小数点以下の最大桁数です。s (スケール) は、小数点以下の桁数です。

クライアント

クライアント説明
Prisma Client JSDecimalDecimalの操作例を参照してください。

DateTime

備考

  • Prisma ClientはすべてのDateTimeをネイティブのDateオブジェクトとして返します。
  • 現在、Prisma ORMはMySQLのゼロ日付0000-00-00 00:00:000000-00-0000:00:00)をサポートしていません
  • 現在、DateTime値を文字列として渡すことを許可せず、渡すとランタイムエラーが発生するバグがあります。DateTime値はDateオブジェクト(つまり、'2024-12-04'ではなくnew Date('2024-12-04'))として渡す必要があります。

詳細情報と例については、このセクションを参照してください: DateTimeの操作

デフォルトの型マッピング

コネクタデフォルトのマッピング
PostgreSQLtimestamp(3)
SQL Serverdatetime2
MySQLDATETIME(3)
MongoDBTimestamp
SQLiteNUMERIC
CockroachDBTIMESTAMP

PostgreSQL

ネイティブデータベース型ネイティブデータベース型属性注釈
timestamp(x)@db.Timestamp(x)
timestamptz(x)@db.Timestamptz(x)
date@db.Date
time(x)@db.Time(x)
timetz(x)@db.Timetz(x)

MySQL

ネイティブデータベース型ネイティブデータベース型属性注釈
DATETIME(x)@db.DateTime(x)
DATE(x)@db.Date(x)
TIME(x)@db.Time(x)
TIMESTAMP(x)@db.Timestamp(x)

MySQLのYEAR型をIntと組み合わせて使用することもできます。

yearField     Int    @db.Year

MongoDB

Timestamp

Microsoft SQL Server

ネイティブデータベース型ネイティブデータベース型属性注釈
date@db.Date
time@db.Time
datetime@db.DateTime
datetime2@db.DateTime2
smalldatetime@db.SmallDateTime
datetimeoffset@db.DateTimeOffset

SQLite

NUMERICまたはSTRING。基になるデータ型がSTRINGの場合、以下のいずれかの形式を使用する必要があります

  • RFC 33391996-12-19T16:39:57-08:00
  • RFC 2822Tue, 1 Jul 2003 10:52:37 +0200

CockroachDB

ネイティブデータベース型ネイティブデータベース型属性注釈
TIMESTAMP(x)@db.Timestamp(x)
TIMESTAMPTZ(x)@db.Timestamptz(x)
DATE@db.Date
TIME(x)@db.Time(x)
TIMETZ(x)@db.Timetz(x)

クライアント

Prisma Client JS
Date

Json

JSONオブジェクト。

デフォルトの型マッピング

コネクタデフォルトのマッピング
PostgreSQLjsonb
SQL Serverサポートされていません
MySQLJSON
MongoDB有効なBSONオブジェクト (Relaxedモード)
SQLiteJSONB
CockroachDBJSONB

PostgreSQL

ネイティブデータベース型ネイティブデータベース型属性注釈
json@db.Json
jsonb@db.JsonB

MySQL

ネイティブデータベース型ネイティブデータベース型属性注釈
JSON@db.Json

MongoDB

有効なBSONオブジェクト (Relaxedモード)

Microsoft SQL Server

Microsoft SQL ServerにはJSONに特化したデータ型はありません。ただし、JSONを読み書きするための組み込み関数が多数あります。

SQLite

サポートされていません

CockroachDB

ネイティブデータベース型ネイティブデータベース型属性注釈
JSON | JSONB@db.JsonB

クライアント

Prisma Client JS
object

Bytes

Bytesはバージョン2.17.0以降で利用可能です。

デフォルトの型マッピング

コネクタデフォルトのマッピング
PostgreSQLbytea
SQL Servervarbinary
MySQLLONGBLOB
MongoDBBinData
SQLiteBLOB
CockroachDBBYTES

PostgreSQL

ネイティブデータベース型ネイティブデータベース型属性
bytea@db.ByteA

MySQL

ネイティブデータベース型ネイティブデータベース型属性注釈
LONGBLOB@db.LongBlob
BINARY@db.Binary
VARBINARY@db.VarBinary
TINYBLOB@db.TinyBlob
BLOB@db.Blob
MEDIUMBLOB@db.MediumBlob
BIT@db.Bit

MongoDB

BinData

ネイティブデータベース型属性注釈
@db.ObjectId基になるBSON型がOBJECT_IDの場合(IDフィールド、リレーションスカラー)は必須です
@db.BinData

Microsoft SQL Server

ネイティブデータベース型ネイティブデータベース型属性注釈
binary@db.Binary
varbinary@db.VarBinary
image@db.Image

SQLite

BLOB

CockroachDB

ネイティブデータベース型ネイティブデータベース型属性
BYTES | BYTEA | BLOB@db.Bytes

クライアント

クライアント説明
Prisma Client JSUint8ArrayBytesの操作例を参照してください。
Prisma Client JS (v6以前)BufferBytesの操作例を参照してください。

Unsupported

警告

MongoDBではサポートされていません
MongoDBコネクタUnsupported型をサポートしていません。

Unsupported型は2.17.0で導入され、Prisma Clientでサポートされていないデータ型をPrismaスキーマで表現することを可能にします。Unsupported型のフィールドは、prisma db pullによるイントロスペクション中に作成するか、手動で記述することができ、Prisma Migrateまたはdb pushでデータベースに作成することができます。

備考

  • Unsupported型のフィールドは、生成されたクライアントでは利用できません。

  • モデルに**必須の**Unsupported型が含まれている場合、Prisma Clientではprisma.model.create(..)prisma.model.update(...)prisma.model.upsert(...)は利用できません。

  • サポートされていない型を含むデータベースをイントロスペクトすると、Prisma ORMは以下の警告を表示します

    *** WARNING ***

    These fields are not supported by Prisma Client, because Prisma does not currently support their types.
    * Model "Post", field: "circle", original data type: "circle"

model Star {
id Int @id @default(autoincrement())
position Unsupported("circle")?
example1 Unsupported("circle")
circle Unsupported("circle")? @default(dbgenerated("'<(10,4),11>'::circle"))
}

model フィールド型修飾子

[]修飾子

フィールドをリストにします。

備考

  • オプションにすることはできません(例:Post[]?)。
リレーショナルデータベース
  • スカラーリスト(配列)は、データベースがネイティブでサポートしている場合にのみデータモデルでサポートされます。したがって、現在、スカラーリストはPostgreSQLまたはCockroachDBを使用する場合にのみサポートされます(MySQLおよびSQLiteはネイティブでスカラーリストをサポートしていないため)。
MongoDB
  • スカラーリストはサポートされています

スカラーリストを定義する
model User {
id Int @id @default(autoincrement())
favoriteColors String[]
}
デフォルト値を持つスカラーリストを定義する

バージョン4.0.0以降で利用可能です。

model User {
id Int @id @default(autoincrement())
favoriteColors String[] @default(["red", "blue", "green"])
}

?修飾子

フィールドをオプションにします。

備考

  • リストフィールド(例:Posts[])と併用することはできません

オプションのnameフィールド
model User {
id Int @id @default(autoincrement())
name String?
}

属性

属性は、フィールドまたはブロック(例:モデル)の動作を変更します。データモデルに属性を追加するには2つの方法があります

  • フィールド属性は@で始まる
  • ブロック属性は@@で始まる

一部の属性は引数を取ります。属性内の引数は常に名前付きですが、ほとんどの場合、引数名**を省略できます**。

: シグネチャの先頭のアンダースコアは、引数名が省略可能であることを意味します。

@id

モデルに単一フィールドIDを定義します。

備考

一般
  • リレーションフィールドには定義できません
  • オプションにすることはできません
リレーショナルデータベース
  • 対応するデータベースの構造: PRIMARY KEY

  • 関数を使用してIDを自動生成する@default属性で注釈を付けることができます

  • 任意のスカラーフィールド(StringIntenum)に定義できます

MongoDB
  • 対応するデータベースの構造: 配列を除く任意の有効なBSON型

  • すべてのモデルは@idフィールドを定義する必要があります

  • 基になるIDフィールド名は常に_idであり、@map("_id")でマッピングする必要があります

  • データベースでObjectIdを使用しない限り、任意のスカラーフィールド(StringIntenum)に定義できます

  • ObjectIdをIDとして使用するには、以下を行う必要があります

    • StringまたはBytesフィールド型を使用する

    • フィールドに@db.ObjectIdを注釈する

      id   String  @db.ObjectId  @map("_id")
    • オプションで、auto()関数を使用してObjectIdを自動生成する@default属性でフィールドを注釈する

      id   String  @db.ObjectId  @map("_id") @default(auto())
  • cuid()uuid()ulid()はサポートされていますが、有効なObjectIdを生成しません。@idには代わりにauto()を使用してください。

  • autoincrement()は**サポートされていません**

引数

名前必須説明
mapいいえStringデータベース内の基になる主キー制約の名前。

MySQLまたはMongoDBではサポートされていません。
lengthいいえnumberインデックス付けされる値のサブパートの最大長を指定できます。

MySQLのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。
sortいいえStringIDのエントリがデータベースに格納される順序を指定できます。利用可能なオプションはAscDescです。

SQL Serverのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。
clusteredいいえBooleanIDがクラスタ化されるか、非クラスタ化されるかを定義します。デフォルトはtrueです。

SQL Serverのみ。バージョン3.13.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。

シグネチャ

@id(map: String?, length: number?, sort: String?, clustered: Boolean?)

: バージョン4.0.0以前、またはextendedIndexesプレビュー機能が有効な3.5.0では、シグネチャは

@id(map: String?)

: バージョン3.0.0以前では、シグネチャは

@id

ほとんどの場合、データベースにIDを作成させたいでしょう。これを行うには、IDフィールドに@default属性を注釈し、関数でフィールドを初期化します。

IDとして自動インクリメント整数を生成する (リレーショナルデータベースのみ)
model User {
id Int @id @default(autoincrement())
name String
}
IDとしてObjectIdを生成する (MongoDBのみ)
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
}
IDとしてcuid()値を生成する
model User {
id String @id @default(cuid())
name String
}
IDとしてuuid()値を生成する
model User {
id String @id @default(uuid())
name String
}
IDとしてulid()値を生成する
model User {
id String @id @default(ulid())
name String
}
デフォルト値なしの単一フィールドID

次の例では、idにデフォルト値がありません

model User {
id String @id
name String
}

なお、上記の場合、Prisma Clientを使用してUserモデルの新しいレコードを作成する際には、独自のID値を必ず指定する必要があります。例:

const newUser = await prisma.user.create({
data: {
id: 1,
name: "Alice",
},
});
デフォルト値を持たないリレーションスカラフィールドにIDを指定する

次の例では、authorIdはリレーションスカラとProfileのIDの両方です

model Profile {
authorId Int @id
author User @relation(fields: [authorId], references: [id])
bio String
}

model User {
id Int @id
email String @unique
name String?
profile Profile?
}

このシナリオでは、Profile単独で作成することはできません。Prisma Clientのネストされた書き込みを使用してUserを作成する**か**、プロフィールを既存のユーザーに接続する必要があります。

次の例はユーザーとプロフィールを作成します

const userWithProfile = await prisma.user.create({
data: {
id: 3,
email: "bob@prisma.io",
name: "Bob Prismo",
profile: {
create: {
bio: "Hello, I'm Bob Prismo and I love apples, blue nail varnish, and the sound of buzzing mosquitoes.",
},
},
},
});

次の例は新しいプロフィールをユーザーに接続します

const profileWithUser = await prisma.profile.create({
data: {
bio: "Hello, I'm Bob and I like nothing at all. Just nothing.",
author: {
connect: {
id: 22,
},
},
},
});

@@id

警告

MongoDBではサポートされていません
MongoDBコネクタは複合IDをサポートしていません。

モデルに複数フィールドID(複合ID)を定義します。

備考

  • 対応するデータベース型:PRIMARY KEY
  • 関数を使用してIDを自動生成する@default属性で注釈を付けることができます
  • オプションにすることはできません
  • 任意のスカラーフィールド(StringIntenum)に定義できます
  • リレーションフィールドには定義できません
  • Prisma Clientにおける複合IDフィールドの名前は以下のパターンになります:field1_field2_field3

引数

名前必須説明
fieldsはいFieldReference[]フィールド名のリスト — 例:["firstname", "lastname"]
nameいいえStringPrisma Clientがすべてのフィールドをカバーする引数として公開する名前。例:fullName: { firstName: "First", lastName: "Last"}におけるfullName
mapいいえStringデータベース内の基になる主キー制約の名前。

MySQLではサポートされていません。
lengthいいえnumberインデックス付けされる値のサブパートの最大長を指定できます。

MySQLのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。
sortいいえStringIDのエントリがデータベースに格納される順序を指定できます。利用可能なオプションはAscDescです。

SQL Serverのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。
clusteredいいえBooleanIDがクラスタ化されるか、非クラスタ化されるかを定義します。デフォルトはtrueです。

SQL Serverのみ。バージョン3.13.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。

@@id属性のfields引数の名前は省略できます

@@id(fields: [title, author])
@@id([title, author])

シグネチャ

@@id(_ fields: FieldReference[], name: String?, map: String?)

:バージョン3.0.0までは、シグネチャは以下でした

@@id(_ fields: FieldReference[])

2つのStringフィールドに複数フィールドIDを指定する(リレーショナルデータベースのみ)
model User {
firstName String
lastName String
email String @unique
isAdmin Boolean @default(false)

@@id([firstName, lastName])
}

ユーザーを作成する際、firstNamelastNameの一意の組み合わせを指定する必要があります

const user = await prisma.user.create({
data: {
firstName: "Alice",
lastName: "Smith",
},
});

ユーザーを取得するには、生成された複合IDフィールド(firstName_lastName)を使用します

const user = await prisma.user.findUnique({
where: {
firstName_lastName: {
firstName: "Alice",
lastName: "Smith",
},
},
});
2つのStringフィールドと1つのBooleanフィールドに複数フィールドIDを指定する(リレーショナルデータベースのみ)
model User {
firstName String
lastName String
email String @unique
isAdmin Boolean @default(false)

@@id([firstName, lastName, isAdmin])
}

新しいUserレコードを作成する際には、firstNamelastNameisAdminの値の一意の組み合わせを指定する必要があります

const user = await prisma.user.create({
data: {
firstName: "Alice",
lastName: "Smith",
isAdmin: true,
},
});
リレーションフィールドを含む複数フィールドIDを指定する(リレーショナルデータベースのみ)
model Post {
title String
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int

@@id([authorId, title])
}

model User {
id Int @default(autoincrement())
email String @unique
name String?
posts Post[]
}

新しいPostレコードを作成する際には、authorId(外部キー)とtitleの値の一意の組み合わせを指定する必要があります

const post = await prisma.post.create({
data: {
title: "Hello World",
author: {
connect: {
email: "alice@prisma.io",
},
},
},
});

@default

フィールドのデフォルト値を定義します。

備考

  • Prismaスキーマではまだ表現できないデフォルト値は、イントロスペクションを使用する際にdbgenerated()関数によって表現されます。
  • Prismaスキーマのリレーションフィールドではデフォルト値は許可されません。ただし、リレーションをバックアップするフィールド(@relation属性のfields引数にリストされているフィールド)にはデフォルト値を定義できます。リレーションをバックアップするフィールドにデフォルト値が設定されている場合、そのリレーションは自動的に入力されます。
  • デフォルト値は、ネイティブでサポートするデータベースのスカラーリストで使用できます。
リレーショナルデータベース
  • 対応するデータベースの構築:DEFAULT
  • デフォルト値は静的な値(4"hello")または以下の関数のいずれかになります
  • Prismaスキーマではまだ表現できないデフォルト値は、イントロスペクションを使用する際にdbgenerated(...)関数によって表現されます。
  • Prismaスキーマのリレーションフィールドではデフォルト値は許可されません。ただし、リレーションをバックアップするフィールド(@relation属性のfields引数にリストされているフィールド)にはデフォルト値を定義できます。リレーションをバックアップするフィールドにデフォルト値が設定されている場合、そのリレーションは自動的に入力されます。
  • デフォルト値は、ネイティブでサポートするデータベースのスカラーリストで使用できます。
  • JSONデータ。@default属性内でJSONは二重引用符で囲む必要があります(例:@default("[]"))。JSONオブジェクトを提供したい場合は、二重引用符で囲み、内部の二重引用符をバックスラッシュでエスケープする必要があります(例:@default("{ \"hello\": \"world\" }"))。
MongoDB
  • デフォルト値は静的な値(4"hello")または以下の関数のいずれかになります

引数

名前必須説明
valueはい式(例:5truenow()
mapいいえStringSQL Serverのみ。

@default属性のvalue引数の名前は省略できます

id Int @id @default(value: autoincrement())
id Int @id @default(autoincrement())

シグネチャ

@default(_ value: Expression, map: String?)

:バージョン3.0.0までは、シグネチャは以下でした

@default(_ value: Expression)

Intのデフォルト値
model User {
email String @unique
profileViews Int @default(0)
}
Floatのデフォルト値
model User {
email String @unique
number Float @default(1.1)
}
Decimalのデフォルト値
model User {
email String @unique
number Decimal @default(22.99)
}
BigIntのデフォルト値
model User {
email String @unique
number BigInt @default(34534535435353)
}
Stringのデフォルト値
model User {
email String @unique
name String @default("")
}
Booleanのデフォルト値
model User {
email String @unique
isAdmin Boolean @default(false)
}
DateTimeのデフォルト値

DateTimeの静的なデフォルト値はISO 8601標準に基づいている点にご注意ください。

model User {
email String @unique
data DateTime @default("2020-03-19T14:21:00+02:00")
}
Bytesのデフォルト値
model User {
email String @unique
secret Bytes @default("SGVsbG8gd29ybGQ=")
}
enumのデフォルト値
enum Role {
USER
ADMIN
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
role Role @default(USER)
posts Post[]
profile Profile?
}
スカラーリストのデフォルト値
model User {
id Int @id @default(autoincrement())
posts Post[]
favoriteColors String[] @default(["red", "yellow", "purple"])
roles Role[] @default([USER, DEVELOPER])
}

enum Role {
USER
DEVELOPER
ADMIN
}

@unique

このフィールドの一意制約を定義します。

備考

一般
  • @uniqueでアノテーションされたフィールドはオプションまたは必須にできます
  • @uniqueでアノテーションされたフィールドは、@id / @@idを持たないモデルで唯一の一意制約を表す場合、必須である必要があります
  • モデルは任意の数の一意制約を持つことができます
  • 任意のスカラフィールドで定義できます
  • リレーションフィールドでは定義できません
リレーショナルデータベース
  • 対応するデータベースの構築:UNIQUE
  • NULL値は個別のものと見なされます(同じ列に複数のNULL値を持つ行が許可されます)
  • 一意制約を追加すると、指定された列にそれに対応する一意インデックスが自動的に追加されます。
MongoDB

引数

名前必須説明
mapいいえString
lengthいいえnumberインデックス付けされる値のサブパートの最大長を指定できます。

MySQLのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。
sortいいえString制約のエントリがデータベースに格納される順序を指定できます。利用可能なオプションはAscDescです。

バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般提供されています。
clusteredいいえBoolean制約がクラスタ化されているか非クラスタ化されているかを定義します。デフォルトはfalseです。

SQL Serverのみ。バージョン3.13.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。
  • ¹ 一部のインデックスおよびフィールドタイプで必須となる場合があります。

シグネチャ

@unique(map: String?, length: number?, sort: String?)

: バージョン4.0.0以前、またはextendedIndexesプレビュー機能が有効な3.5.0では、シグネチャは

@unique(map: String?)

: バージョン3.0.0以前では、シグネチャは

@unique

必須のStringフィールドに一意属性を指定する
model User {
email String @unique
name String
}
オプションのStringフィールドに一意属性を指定する
model User {
id Int @id @default(autoincrement())
email String? @unique
name String
}
リレーションスカラフィールドauthorIdに一意属性を指定する
model Post {
author User @relation(fields: [authorId], references: [id])
authorId Int @unique
title String
published Boolean @default(false)
}

model User {
id Int @id @default(autoincrement())
email String? @unique
name String
Post Post[]
}
cuid()値をデフォルト値として使用して一意属性を指定する
model User {
token String @unique @default(cuid())
name String
}

@@unique

指定されたフィールドの複合一意制約を定義します。

備考

一般
  • 一意制約を構成するすべてのフィールドは、必須フィールドである必要がありますidnullになる可能性があるため、以下のモデルは無効です

    model User {
    firstname Int
    lastname Int
    id Int?

    @@unique([firstname, lastname, id])
    }

    この動作の理由は、すべてのコネクタがnull値を個別のものと見なすためであり、これは見た目上同じ2つの行が一意と見なされることを意味します

     firstname  | lastname | id
    -----------+----------+------
    John | Smith | null
    John | Smith | null
  • モデルは任意の数の@@uniqueブロックを持つことができます

リレーショナルデータベース
  • 対応するデータベースの構築:UNIQUE
  • @id / @@idを持たないモデルで唯一の一意制約を表す場合、@@uniqueブロックは必須です
  • 一意制約を追加すると、指定された列にそれに対応する一意インデックスが自動的に追加されます
MongoDB
  • MongoDBの複合インデックスによって強制されます
  • @@uniqueブロックはモデルの唯一の一意識別子として使用できません - MongoDBは@idフィールドを必要とします

引数

名前必須説明
fieldsはいFieldReference[]フィールド名のリスト — 例:["firstname", "lastname"]。フィールドは必須である必要があります — 備考を参照してください。
nameいいえStringフィールドの一意の組み合わせの名前 — デフォルトはfieldName1_fieldName2_fieldName3
mapいいえString
lengthいいえnumberインデックス付けされる値のサブパートの最大長を指定できます。

MySQLのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。
sortいいえString制約のエントリがデータベースに格納される順序を指定できます。利用可能なオプションはAscDescです。

バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般提供されています。
clusteredいいえBoolean制約がクラスタ化されているか非クラスタ化されているかを定義します。デフォルトはfalseです。

SQL Serverのみ。バージョン3.13.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。

@@unique属性のfields引数の名前は省略できます

@@unique(fields: [title, author])
@@unique([title, author])
@@unique(fields: [title, author], name: "titleAuthor")

lengthsort引数は関連するフィールド名に追加されます

@@unique(fields: [title(length:10), author])
@@unique([title(sort: Desc), author(sort: Asc)])

シグネチャ

@@unique(_ fields: FieldReference[], name: String?, map: String?)

:バージョン4.0.0より前、またはextendedIndexesプレビュー機能が有効なバージョン3.5.0より前では、シグネチャは以下でした

@@unique(_ fields: FieldReference[], name: String?, map: String?)

: バージョン3.0.0以前では、シグネチャは

@@unique(_ fields: FieldReference[], name: String?)

2つのStringフィールドに複数フィールドの一意属性を指定する
model User {
id Int @default(autoincrement())
firstName String
lastName String
isAdmin Boolean @default(false)

@@unique([firstName, lastName])
}

ユーザーを取得するには、生成されたフィールド名(firstname_lastname)を使用します

const user = await prisma.user.findUnique({
where: {
firstName_lastName: {
firstName: "Alice",
lastName: "Smith",
isAdmin: true,
},
},
});
2つのStringフィールドと1つのBooleanフィールドに複数フィールドの一意属性を指定する
model User {
id Int @default(autoincrement())
firstName String
lastName String
isAdmin Boolean @default(false)

@@unique([firstName, lastName, isAdmin])
}
リレーションフィールドを含む複数フィールドの一意属性を指定する
model Post {
id Int @default(autoincrement())
author User @relation(fields: [authorId], references: [id])
authorId Int
title String
published Boolean @default(false)

@@unique([authorId, title])
}

model User {
id Int @id @default(autoincrement())
email String @unique
posts Post[]
}
複数フィールドの一意属性にカスタムnameを指定する
model User {
id Int @default(autoincrement())
firstName String
lastName String
isAdmin Boolean @default(false)

@@unique(fields: [firstName, lastName, isAdmin], name: "admin_identifier")
}

ユーザーを取得するには、カスタムフィールド名(admin_identifier)を使用します

const user = await prisma.user.findUnique({
where: {
admin_identifier: {
firstName: "Alice",
lastName: "Smith",
isAdmin: true,
},
},
});

@@index

データベースにインデックスを定義します。

備考

リレーショナルデータベース
  • 対応するデータベースの構築:INDEX
  • Prismaスキーマではまだ提供できない追加のインデックス構成オプションがいくつかあります。
    • PostgreSQLとCockroachDB
      • インデックスフィールドを式として定義する(例:CREATE INDEX title ON public."Post"((lower(title)) text_ops);
      • WHERE句を使用して部分インデックスを定義する
      • CONCURRENTLYを使用してインデックスを同時作成する
情報

Prismaスキーマでこれらのオプションを設定することはできませんが、データベースレベルで直接設定することは可能です。

MongoDB
  • バージョン3.12.0以降では、@@index([compositeType.field])の構文を使用して複合型のフィールドにインデックスを定義できます。詳細については「複合型インデックスの定義」を参照してください。

引数

名前必須説明
fieldsはいFieldReference[]フィールド名のリスト — 例:["firstname", "lastname"]
nameいいえStringPrisma Clientがすべてのフィールドをカバーする引数として公開する名前。例:fullName: { firstName: "First", lastName: "Last"}におけるfullName
mapいいえmap基となるデータベース内のインデックスの名前(名前を指定しない場合、Prismaは識別子の長さ制限を尊重するインデックス名を生成します。Prismaは以下の命名規則を使用します:tablename.field1_field2_field3_unique
lengthいいえnumberインデックス付けされる値のサブパートの最大長を指定できます。

MySQLのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。
sortいいえStringインデックスまたは制約のエントリがデータベースに格納される順序を指定できます。利用可能なオプションはascdescです。

バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般提供されています。
clusteredいいえBooleanインデックスがクラスタ化されているか非クラスタ化されているかを定義します。デフォルトはfalseです。

SQL Serverのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。
typeいいえidentifierインデックスアクセス方法を指定できます。デフォルトはBTreeです。

PostgreSQLとCockroachDBのみ。バージョン3.6.0以降ではHashインデックスアクセス方法でプレビュー、バージョン3.14.0でGistGinSpGistBrinメソッドが追加されました。バージョン4.0.0以降で一般提供されています。
opsいいえidentifier または function特定のインデックスタイプに対してインデックス演算子を定義できます。

PostgreSQLのみ。バージョン3.14.0以降でプレビュー、バージョン4.0.0以降で一般提供されています。

@@index属性のfields引数の名前は省略できます

@@index(fields: [title, author])
@@index([title, author])

lengthsort引数は関連するフィールド名に追加されます

@@index(fields: [title(length:10), author])
@@index([title(sort: Asc), author(sort: Desc)])

シグネチャ

@@index(_ fields: FieldReference[], map: String?)

:バージョン3.0.0までは、シグネチャは以下でした

@@index(_ fields: FieldReference[], name: String?)

破壊的変更を避けるため、古いname引数は引き続き受け入れられます。

Postモデルのtitleフィールドにインデックスを追加すると仮定します

単一列インデックスを定義する(リレーショナルデータベースのみ)
model Post {
id Int @id @default(autoincrement())
title String
content String?

@@index([title])
}
複数列インデックスを定義する(リレーショナルデータベースのみ)
model Post {
id Int @id @default(autoincrement())
title String
content String?

@@index([title, content])
}
名前付きインデックスを定義する(リレーショナルデータベースのみ)
model Post {
id Int @id @default(autoincrement())
title String
content String?

@@index(fields: [title, content], name: "main_index")
}
複合型フィールドにインデックスを定義する(リレーショナルデータベースのみ)
type Address {
street String
number Int
}

model User {
id Int @id
email String
address Address

@@index([address.number])
}

@relation

リレーションに関するメタ情報を定義します。詳細はこちら

備考

リレーショナルデータベース
  • 対応するデータベース構成:FOREIGN KEY / REFERENCES
MongoDB
  • 基となるデータベースでモデルのプライマリキーがObjectIdタイプである場合、プライマリキー外部キーの両方に@db.ObjectId属性が必要です

引数

名前必須説明
nameString場合によっては(例:リレーションの曖昧さを解消するためなど)リレーションシップの名前を定義します。多対多リレーションでは、基となるリレーションテーブルの名前も決定します。"CategoryOnPost""MyRelation"
fieldsFieldReference[]アノテーション付きリレーションフィールドで現在のモデルのフィールドリスト["authorId"]["authorFirstName, authorLastName"]
referencesFieldReference[]アノテーション付きリレーションフィールドでリレーションの反対側にあるモデルのフィールドリスト["id"]["firstName, lastName"]
mapStringいいえデータベース内の外部キーにカスタム名を定義します。["id"]["firstName, lastName"]
onUpdateEnum。参照アクションのタイプで値を確認してください。いいえ参照されるモデル内の参照されるエントリが更新されるときに実行する参照アクションを定義します。CascadeNoAction
onDeleteEnum。参照アクションのタイプで値を確認してください。いいえ参照されるモデル内の参照されるエントリが削除されるときに実行する参照アクションを定義します。CascadeNoAction

@relation属性のname引数の名前は省略できます(referencesは必須です)

@relation(name: "UserOnPost", references: [id])
@relation("UserOnPost", references: [id])

// or

@relation(name: "UserOnPost")
@relation("UserOnPost")

シグネチャ

@relation(_ name: String?, fields: FieldReference[]?, references: FieldReference[]?, onDelete: ReferentialAction?, onUpdate: ReferentialAction?, map: String?)

SQLiteでは、シグネチャは以下のように変更されます

@relation(_ name: String?, fields: FieldReference[]?, references: FieldReference[]?, onDelete: ReferentialAction?, onUpdate: ReferentialAction?)

:バージョン3.0.0までは、シグネチャは以下でした

@relation(_ name: String?, fields: FieldReference[]?, references: FieldReference[]?)

参照:@relation属性

@map

Prismaスキーマのフィールド名またはenum値を、データベース内の異なる名前の列またはドキュメントフィールドにマッピングします。@mapを使用しない場合、Prismaのフィールド名は列名またはドキュメントフィールド名と完全に一致します。

@map@@mapが生成されるPrisma Clientをどのように変更するかについては、「カスタムモデル名とフィールド名の使用」を参照してください。

備考

一般
MongoDB

あなたの@idフィールドには@map("_id")を含める必要があります。例:

model User {
id String @default(auto()) @map("_id") @db.ObjectId
}

引数

名前必須説明
nameStringはいデータベースの列(リレーショナルデータベース)またはドキュメントフィールド(MongoDB)の名前。"comments""someFieldName"

@map属性のname引数の名前は省略できます

@map(name: "is_admin")
@map("users")

シグネチャ

@map(_ name: String)

firstNameフィールドをfirst_nameという名前の列にマッピングする
model User {
id Int @id @default(autoincrement())
firstName String @map("first_name")
}

生成されたクライアント

await prisma.user.create({
data: {
firstName: "Yewande", // first_name --> firstName
},
});
ADMINという名前のenumをadminという名前のデータベースenumにマッピングする
enum Role {
ADMIN @map("admin")
CUSTOMER
}

@@map

Prismaスキーマのモデル名を、データベース内の異なる名前のテーブル(リレーショナルデータベース)またはコレクション(MongoDB)にマッピングするか、enum名をデータベース内の異なる基となるenumにマッピングします。@@mapを使用しない場合、モデル名はテーブル(リレーショナルデータベース)またはコレクション(MongoDB)名と完全に一致します。

@map@@mapが生成されるPrisma Clientをどのように変更するかについては、「カスタムモデル名とフィールド名の使用」を参照してください。

引数

名前必須説明
nameStringはいデータベースのテーブル(リレーショナルデータベース)またはコレクション(MongoDB)の名前。"comments""someTableOrCollectionName"

@@map属性のname引数の名前は省略できます

@@map(name: "users")
@@map("users")

シグネチャ

@@map(_ name: String)

Userモデルをusersという名前のデータベーステーブル/コレクションにマッピングする
model User {
id Int @id @default(autoincrement())
name String

@@map("users")
}

生成されたクライアント

await prisma.user.create({
// users --> user
data: {
name: "Yewande",
},
});
Roleenumを、データベース内の_Roleという名前のネイティブenumにマッピングし、その値をデータベース内の小文字の値にマッピングする
enum Role {
ADMIN @map("admin")
CUSTOMER @map("customer")

@@map("_Role")
}

@updatedAt

レコードが最後に更新された時刻を自動的に保存します。時間を自分で指定しない場合、Prisma Clientはこの属性を持つフィールドの値を自動的に設定します。

備考

  • DateTimeフィールドと互換性があります
  • Prisma ORMレベルで実装されています
警告

4.4.0より前のバージョンでは、now()も使用している場合、データベースとアプリのタイムゾーンが異なる場合、時刻が@updatedAtの値と異なる場合があります。これは、@updatedAtがPrisma ORMレベルで動作するのに対し、now()はデータベースレベルで動作するためです。

空の更新句を渡した場合、@updatedAtの値は変更されません。例えば

await prisma.user.update({
where: {
id: 1,
},
data: {}, //<- Empty update clause
});

引数

該当なし

シグネチャ

@updatedAt

model Post {
id String @id
updatedAt DateTime @updatedAt
}

@ignore

Prisma Clientから除外したいフィールド(例えば、Prisma Clientユーザーに更新させたくないフィールド)に@ignoreを追加します。無視されたフィールドは生成されたPrisma Clientから除外されます。@defaultを持たない必須フィールドに対してこれを行うと、モデルのcreateメソッドは無効になります(データベースはそのデータなしではエントリを作成できないため)。

備考

  • 2.17.0以降では、Prisma ORMはイントロスペクションを行う際に無効なモデルを参照するフィールドに自動的に@ignoreを追加します。

次の例は、emailフィールドをPrisma Clientから除外するために手動で@ignoreを追加する方法を示しています

schema.prisma
model User {
id Int @id
name String
email String @ignore // this field will be excluded
}

@@ignore

Prisma Clientから除外したいモデル(例えば、Prismaユーザーに更新させたくないモデル)に@@ignoreを追加します。無視されたモデルは生成されたPrisma Clientから除外されます。

備考

  • 2.17.0以降では、Prisma ORMは無効なモデルに@@ignoreを追加します。(そのようなモデルを指すリレーションにも@ignoreを追加します)

次の例では、Postモデルは一意の識別子を持たないため無効です。生成されたPrisma Client APIから除外するために@@ignoreを使用します

schema.prisma
/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.
model Post {
id Int @default(autoincrement()) // no unique identifier
author User @relation(fields: [authorId], references: [id])
authorId Int

@@ignore
}

次の例では、Postモデルは一意の識別子を持たないため無効であり、Userpostsリレーションフィールドも無効なPostモデルを参照しているため無効です。生成されたPrisma Client APIからモデルとリレーションフィールドの両方を除外するために、Postモデルに@@ignoreを、Userpostsリレーションフィールドに@ignoreを使用します

schema.prisma
/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.
model Post {
id Int @default(autoincrement()) // no unique identifier
author User @relation(fields: [authorId], references: [id])
authorId Int

@@ignore
}

model User {
id Int @id @default(autoincrement())
name String?
posts Post[] @ignore
}

@@schema

警告

この属性を使用するには、multiSchemaプレビュー機能を有効にする必要があります。複数のデータベーススキーマのサポートは現在、PostgreSQL、CockroachDB、およびSQL Serverコネクタで利用可能です。

モデルに@@schemaを追加して、そのモデルに関連付けられたテーブルがデータベース内のどのスキーマに含まれるべきかを指定します。

引数

名前必須説明
nameStringはいデータベーススキーマの名前。"base""auth"

@@schema属性のname引数の名前は省略できます

@@schema(name: "auth")
@@schema("auth")

シグネチャ

@@schema(_ name: String)

Userモデルをauthという名前のデータベーススキーマにマッピングする
generator client {
provider = "prisma-client-js"
previewFeatures = ["multiSchema"]
}

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
schemas = ["auth"]
}

model User {
id Int @id @default(autoincrement())
name String

@@schema("auth")
}
情報

multiSchema機能の使用に関する詳細については、このガイドを参照してください。

@shardKey

この機能を使用するには、generatorshardKeysプレビュー機能フラグが必要です

generator client {
provider = "prisma-client-js"
output = "../generated/prisma"
previewFeatures = ["shardKeys"]
}

@shardKey属性はPlanetScaleデータベースとのみ互換性があります。これにより、モデルのフィールドにシャードキーを定義できます

model User {
id String @default(uuid())
region String @shardKey
}

@@shardKey

この機能を使用するには、generatorshardKeysプレビュー機能フラグが必要です

generator client {
provider = "prisma-client-js"
output = "../generated/prisma"
previewFeatures = ["shardKeys"]
}

@shardKey属性はPlanetScaleデータベースとのみ互換性があります。これにより、モデルの複数のフィールドにシャードキーを定義できます

model User {
id String @default(uuid())
country String
customerId String
@@shardKey([country, customerId])
}

属性関数

auto()

警告
この関数はMongoDBでのみ利用可能です。

データベースによって自動的に生成されるデフォルト値を表します。

備考

MongoDB

@idフィールドのObjectIdを生成するために使用されます

id  String  @map("_id") @db.ObjectId @default(auto())
リレーショナルデータベース

auto()関数はリレーショナルデータベースでは利用できません。

ObjectIdを生成する(MongoDBのみ)
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String?
}

autoincrement()

警告

MongoDBではサポートされていません
MongoDBコネクタautoincrement()関数をサポートしていません。

基となるデータベースに整数シーケンスを作成し、シーケンスに基づいて作成されたレコードのID値に増分値を割り当てます。

備考

  • ほとんどのデータベースでIntと互換性があります(CockroachDBではBigInt

  • データベースレベルで実装されており、データベーススキーマに現れ、イントロスペクションを通じて認識できることを意味します。データベースの実装

    データベース実装
    PostgreSQLSERIAL
    MySQLAUTO_INCREMENT属性
    SQLiteAUTOINCREMENTキーワード
    CockroachDBSERIAL

IDとして自動増分整数を生成する(リレーショナルデータベースのみ)
model User {
id Int @id @default(autoincrement())
name String
}

sequence()

情報

CockroachDBのみでサポート
sequence関数はCockroachDBコネクタのみでサポートされています。

基となるデータベースに整数シーケンスを作成し、シーケンスに基づいて作成されたレコードの値に増分値を割り当てます。

オプションの引数

引数
virtual@default(sequence(virtual))
仮想シーケンスは、単調に増加する値を生成せず、代わりに組み込み関数unique_rowid()によって生成されるような値を生成するシーケンスです。
cache@default(sequence(cache: 20))
セッションで再利用するためにメモリにキャッシュするシーケンス値の数。キャッシュサイズが1の場合、キャッシュはなく、1未満のキャッシュサイズは無効です。
increment@default(sequence(increment: 4))
シーケンスが増加する新しい値。負の数は降順シーケンスを作成し、正の数は昇順シーケンスを作成します。
minValue@default(sequence(minValue: 10))
シーケンスの新しい最小値。
maxValue@default(sequence(maxValue: 3030303))
シーケンスの新しい最大値。
start@default(sequence(start: 2))
シーケンスが再開された場合、またはシーケンスがmaxValueに達した場合に、シーケンスが開始する値。

IDとしてシーケンス整数を生成する
model User {
id Int @id @default(sequence(maxValue: 4294967295))
name String
}

cuid()

cuid仕様に基づいたグローバルに一意な識別子を生成します。

cuid2値を使用したい場合は、cuid関数に2を引数として渡すことができます:cuid(2)

備考

  • Stringと互換性があります。
  • Prisma ORMによって実装されているため、基となるデータベーススキーマでは「可視化」されません。イントロスペクションを使用している場合でも、Prismaスキーマを手動で変更し、Prisma Clientを生成することでcuid()を使用できます。その場合、値はPrismaのクエリエンジンによって生成されます。
  • cuid()出力の長さはcuid作成者によって未定義であるため、非常に大きな値に対応するために、安全なフィールドサイズは30文字です。フィールドサイズを30未満に設定し、cuid()によってより大きな値が生成された場合、Error: The provided value for the column is too long for the column's type.のようなPrisma Clientエラーが発生する可能性があります。
  • MongoDBの場合cuid()は有効なObjectIdを生成しません。基となるデータベースでObjectIdを使用したい場合は、@db.ObjectId構文を使用できます。ただし、_idフィールドがObjectIdタイプでない場合は、引き続きcuid()を使用できます。

IDとしてcuid()値を生成する
model User {
id String @id @default(cuid())
name String
}
cuid2仕様に基づいてIDとしてcuid(2)値を生成する
model User {
id String @id @default(cuid(2))
name String
}

uuid()

UUID仕様に基づいたグローバルに一意な識別子を生成します。Prisma ORMはバージョン4(デフォルト)と7をサポートしています。

備考

UUID v4を使用してIDとしてuuid()値を生成する
model User {
id String @id @default(uuid())
name String
}
UUID v7を使用してIDとしてuuid(7)値を生成する
model User {
id String @id @default(uuid(7))
name String
}

ulid()

ULID仕様に基づいた、ユニバーサルに一意で辞書順にソート可能な識別子を生成します。

備考

  • ulid()は、01ARZ3NDEKTSV4RRFFQ69G5FAVのような26文字の英数字文字列として表現される128ビットのランダムな識別子を生成します。

IDとしてulid()値を生成する
model User {
id String @id @default(ulid())
name String
}

nanoid()

Nano ID仕様に基づいた値を生成します。nanoid()は、生成されるID値の長さを指定する2から255までの整数値を受け入れます(例:nanoid(16)は16文字のIDを生成します)。nanoid()関数に値を指定しない場合、デフォルト値は21です。

情報

Nano IDはUUID v4(ランダムベース)とかなり同等です。IDに含まれるランダムビットの数は似ており(Nano IDで126、UUIDで122)、衝突確率も似ています

複製される確率が10億分の1になるには、103兆個のバージョン4 IDを生成する必要があります。

Nano IDとUUID v4には2つの主な違いがあります

  • Nano IDはより大きなアルファベットを使用するため、同様の数のランダムビットが36ではなくわずか21シンボルに詰め込まれています。
  • Nano IDのコードはuuid/v4パッケージよりも4倍小さいです。423バイトではなく130バイトです。

備考

  • Stringと互換性があります。
  • Prisma ORMによって実装されているため、基となるデータベーススキーマでは「可視化」されません。イントロスペクションを使用している場合でも、Prismaスキーマを手動で変更し、Prisma Clientを生成することでuuid()を使用できます。その場合、値はPrisma ORMのクエリエンジンによって生成されます。
  • MongoDBの場合nanoid()は有効なObjectIdを生成しません。基となるデータベースでObjectIdを使用したい場合は、@db.ObjectId構文を使用できます。ただし、_idフィールドがObjectIdタイプでない場合は、引き続きnanoid()を使用できます。

21文字のnanoid()値をIDとして生成する
model User {
id String @id @default(nanoid())
name String
}
16文字のnanoid()値をIDとして生成する
model User {
id String @id @default(nanoid(16))
name String
}

now()

レコードが作成された時刻のタイムスタンプを設定します。

備考

一般
警告

4.4.0より前のバージョンでは、@updatedAtも使用している場合、データベースとアプリのタイムゾーンが異なる場合、時刻がnow()の値と異なる場合があります。これは、@updatedAtがPrisma ORMレベルで動作するのに対し、now()はデータベースレベルで動作するためです。

リレーショナルデータベース
  • データベースレベルで実装されており、データベーススキーマに現れ、イントロスペクションを通じて認識できることを意味します。データベースの実装

    データベース実装
    PostgreSQLCURRENT_TIMESTAMPおよびnow()のようなエイリアス
    MySQLCURRENT_TIMESTAMPおよびnow()のようなエイリアス
    SQLiteCURRENT_TIMESTAMPおよびdate('now')のようなエイリアス
    CockroachDBCURRENT_TIMESTAMPおよびnow()のようなエイリアス
MongoDB
  • Prisma ORMレベルで実装されています

レコードが作成されたときに現在のタイムスタンプ値を設定する
model User {
id String @id
createdAt DateTime @default(now())
}

dbgenerated(...)

Prismaスキーマでは表現できないデフォルト値random()など)を表します。

備考

リレーショナルデータベース

Unsupportedタイプのデフォルト値を設定する
circle     Unsupported("circle")?   @default(dbgenerated("'<(10,4),11>'::circle"))
サポートされているタイプのデフォルト値の動作を上書きする

dbgenerated(...)を使用して、サポートされているタイプのデフォルト値を設定することもできます。例えば、PostgreSQLではPrisma ORMのuuid()に頼るのではなく、データベースレベルでUUIDを生成できます。

model User {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
id String @id @default(uuid()) @db.Uuid
test String?
}
情報

gen_random_uuid()はPostgreSQL関数です。PostgreSQLバージョン12.13以前でこれを使用するには、pgcrypto拡張を有効にする必要があります。

Prisma ORMバージョン4.5.0以降では、postgresqlExtensionsプレビュー機能を使用してPrismaスキーマでpgcrypto拡張を宣言できます。

属性引数型

FieldReference[]

フィールド名の配列:[id][firstName, lastName]

String

二重引用符で囲まれた可変長テキスト:"""Hello World""Alice"

Expression

Prisma ORMによって評価できる式:42.0""Bobnow()cuid()

enum

警告

Microsoft SQL Serverではサポートされていません
Microsoft SQL Serverコネクタenumタイプをサポートしていません。

enumを定義します。

備考

  • EnumはPostgreSQLMySQLでネイティブにサポートされています
  • EnumはSQLiteとMongoDBではPrisma ORMレベルで実装および強制されます

命名規則

  • Enum名は文字で始まる必要があります(通常、パスカルケースで表記されます)
  • Enumは単数形を使用する必要があります(例:rolerolesRolesではなくRole)。
  • 次の正規表現に従う必要があります: [A-Za-z][A-Za-z0-9_]*

2つの可能な値を持つenumを指定する

enum Role {
USER
ADMIN
}

model User {
id Int @id @default(autoincrement())
role Role
}

2つの可能な値を持つenumを指定し、デフォルト値を設定する

enum Role {
USER
ADMIN
}

model User {
id Int @id @default(autoincrement())
role Role @default(USER)
}

type

警告

複合型はMongoDBでのみ利用可能です。

情報

複合型はバージョン3.12.0以降で利用可能であり、mongodbプレビュー機能フラグを有効にした場合はバージョン3.10.0以降で利用可能です。

複合型を定義します。

命名規則

型名は以下である必要があります

  • 文字で始まる(通常、パスカルケースで表記されます)
  • 以下の正規表現に準拠する:[A-Za-z][A-Za-z0-9_]*

Photo複合型のリストを持つProductモデルを定義する

model Product {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
photos Photo[]
}

type Photo {
height Int
width Int
url String
}
© . All rights reserved.