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 mysqlやdatasource 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
| ビルドOS | Prismaエンジンビルド名 |
|---|---|
| macOS Intel x86_64 | darwin |
| macOS ARM64 | darwin-arm64 |
Windows
| ビルドOS | Prismaエンジンビルド名 |
|---|---|
| Windows | windows |
Linux (x86_64アーキテクチャ上のAlpine)
| ビルドOS | Prismaエンジンビルド名 | OpenSSL |
|---|---|---|
| Alpine (3.17以降) | linux-musl-openssl-3.0.x* | 3.0.x |
| Alpine (3.16以前) | linux-musl | 1.1.x |
* Prisma ORMバージョン4.8.0以降で利用可能です。
Linux (ARM64アーキテクチャ上のAlpine)
| ビルドOS | Prismaエンジンビルド名 | 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
| ビルドOS | Prismaエンジンビルド名 | OpenSSL |
|---|---|---|
| Debian 8 (Jessie) | debian-openssl-1.0.x | 1.0.x |
| Debian 9 (Stretch) | debian-openssl-1.1.x | 1.1.x |
| Debian 10 (Buster) | debian-openssl-1.1.x | 1.1.x |
| Debian 11 (Bullseye) | debian-openssl-1.1.x | 1.1.x |
| Debian 12 (Bookworm) | debian-openssl-3.0.x | 3.0.x |
Linux (Ubuntu), x86_64
| ビルドOS | Prismaエンジンビルド名 | OpenSSL |
|---|---|---|
| Ubuntu 14.04 (trusty) | debian-openssl-1.0.x | 1.0.x |
| Ubuntu 16.04 (xenial) | debian-openssl-1.0.x | 1.0.x |
| Ubuntu 18.04 (bionic) | debian-openssl-1.1.x | 1.1.x |
| Ubuntu 19.04 (disco) | debian-openssl-1.1.x | 1.1.x |
| Ubuntu 20.04 (focal) | debian-openssl-1.1.x | 1.1.x |
| Ubuntu 21.04 (hirsute) | debian-openssl-1.1.x | 1.1.x |
| Ubuntu 22.04 (jammy) | debian-openssl-3.0.x | 3.0.x |
| Ubuntu 23.04 (lunar) | debian-openssl-3.0.x | 3.0.x |
Linux (CentOS), x86_64
| ビルドOS | Prismaエンジンビルド名 | OpenSSL |
|---|---|---|
| CentOS 7 | rhel-openssl-1.0.x | 1.0.x |
| CentOS 8 | rhel-openssl-1.1.x | 1.1.x |
Linux (Fedora), x86_64
| ビルドOS | Prismaエンジンビルド名 | OpenSSL |
|---|---|---|
| Fedora 28 | rhel-openssl-1.1.x | 1.1.x |
| Fedora 29 | rhel-openssl-1.1.x | 1.1.x |
| Fedora 30 | rhel-openssl-1.1.x | 1.1.x |
| Fedora 36 | rhel-openssl-3.0.x | 3.0.x |
| Fedora 37 | rhel-openssl-3.0.x | 3.0.x |
| Fedora 38 | rhel-openssl-3.0.x | 3.0.x |
Linux (Linux Mint), x86_64
| ビルドOS | Prismaエンジンビルド名 | OpenSSL |
|---|---|---|
| Linux Mint 18 | debian-openssl-1.0.x | 1.0.x |
| Linux Mint 19 | debian-openssl-1.1.x | 1.1.x |
| Linux Mint 20 | debian-openssl-1.1.x | 1.1.x |
| Linux Mint 21 | debian-openssl-3.0.x | 3.0.x |
Linux (Arch Linux), x86_64
| ビルドOS | Prismaエンジンビルド名 | OpenSSL |
|---|---|---|
| Arch Linux 2019.09.01 | debian-openssl-1.1.x | 1.1.x |
| Arch Linux 2023.04.23 | debian-openssl-3.0.x | 3.0.x |
Linux ARM64 (Alpineを除くすべての主要ディストリビューション)
| ビルドOS | Prismaエンジンビルド名 | OpenSSL |
|---|---|---|
| Linux ARM64 glibcベースのディストリビューション | linux-arm64-openssl-1.0.x | 1.0.x |
| Linux ARM64 glibcベースのディストリビューション | linux-arm64-openssl-1.1.x | 1.1.x |
| Linux ARM64 glibcベースのディストリビューション | linux-arm64-openssl-3.0.x | 3.0.x |
例
prisma-client-jsジェネレータをデフォルトのoutput、previewFeatures、engineType、binaryTargetsで指定する
generator client {
provider = "prisma-client-js"
}
上記のgenerator定義は、output、engineType、binaryTargets(および暗黙的に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のモデルを定義します。
備考
命名規則
- モデル名は次の正規表現に従う必要があります:
[A-Za-z][A-Za-z0-9_]* - モデル名は文字で始まる必要があり、通常はPascalCaseで記述されます
- モデル名には単数形を使用する必要があります(例:
user、users、UsersではなくUser) - Prisma ORMには、Prisma ORM内部で使用される多数の**予約語**があり、モデル名として使用することはできません。予約語はこちらとこちらで確認できます。
注:
@@map属性を使用すると、モデル(例:User)を、モデルの命名規則に一致しない異なる名前のテーブル(例:users)にマッピングできます。
フィールドの順序
- バージョン2.3.0以降では、イントロスペクションはモデルフィールドをデータベース内の対応するカラムと同じ順序でリストします。リレーションフィールドはスカラーフィールドの後にリストされます。
例
2つのスカラーフィールドを持つUserという名前のモデル
- リレーショナルデータベース
- MongoDB
model User {
email String @unique // `email` can not be optional because it's the only unique field on the model
name String?
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
email String @unique
name String?
}
model フィールド
フィールドはモデルのプロパティです。
備考
命名規則
- 文字で始まる必要があります
- 通常はcamelCaseで記述されます
- 次の正規表現に従う必要があります:
[A-Za-z][A-Za-z0-9_]*
注:
@map属性を使用すると、フィールド名を、フィールドの命名規則に一致しない異なる名前のカラムにマッピングできます。例:myField @map("my_field")。
model フィールド スカラー型
データソースコネクタは、Prisma ORMのスカラー型のそれぞれがどのネイティブデータベース型にマッピングされるかを決定します。同様に、ジェネレータは、これらの型のそれぞれがターゲットプログラミング言語のどの型にマッピングされるかを決定します。
Prismaモデルには、モデル間のリレーションを定義するモデルフィールド型もあります。
String
可変長テキスト。
デフォルトの型マッピング
| コネクタ | デフォルトのマッピング |
|---|---|
| PostgreSQL | text |
| SQL Server | nvarchar(1000) |
| MySQL | varchar(191) |
| MongoDB | String |
| SQLite | TEXT |
| CockroachDB | STRING |
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.Citext | Citext拡張機能が有効になっている場合にのみ利用可能です。 |
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) | |
| @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
真または偽の値。
デフォルトの型マッピング
| コネクタ | デフォルトのマッピング |
|---|---|
| PostgreSQL | boolean |
| SQL Server | bit |
| MySQL | TINYINT(1) |
| MongoDB | Bool |
| SQLite | INTEGER |
| CockroachDB | BOOL |
PostgreSQL
| ネイティブデータベース型 | ネイティブデータベース型属性 | 注釈 |
|---|---|---|
boolean | @db.Boolean |
MySQL
| ネイティブデータベース型 | ネイティブデータベース型属性 | 注釈 |
|---|---|---|
TINYINT(1) | @db.TinyInt(1) | TINYINTは、最大長が1より大きい場合(例:TINYINT(2))またはデフォルト値が1、0、NULL以外のいずれかである場合、Intにマッピングされます |
BIT(1) | @db.Bit |
MongoDB
Bool
Microsoft SQL Server
| ネイティブデータベース型 | ネイティブデータベース型属性 | 注釈 |
|---|---|---|
bit | @db.Bit |
SQLite
INTEGER
CockroachDB
| ネイティブデータベース型 | ネイティブデータベース型属性 | 注釈 |
|---|---|---|
BOOL | @db.Bool |
クライアント
| Prisma Client JS |
|---|
boolean |
Int
デフォルトの型マッピング
| コネクタ | デフォルトのマッピング |
|---|---|
| PostgreSQL | integer |
| SQL Server | int |
| MySQL | INT |
| MongoDB | Int |
| SQLite | INTEGER |
| CockroachDB | INT |
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.TinyInt | TINYINTは、最大長が1より大きい場合(例:TINYINT(2))またはデフォルト値が1、0、NULL以外のいずれかである場合、Intにマッピングされます。TINYINT(1)はBooleanにマッピングされます。 |
TINYINT UNSIGNED | @db.UnsignedTinyInt | TINYINT(1) UNSIGNEDはBooleanではなく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では、integerとintはint4のエイリアスであり、@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以降で利用可能です。
デフォルトの型マッピング
| コネクタ | デフォルトのマッピング |
|---|---|
| PostgreSQL | bigint |
| SQL Server | int |
| MySQL | BIGINT |
| MongoDB | Long |
| SQLite | INTEGER |
| CockroachDB | INTEGER |
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では、intはint4のエイリアスです。 |
bigserial | serial8 | @db.Int8 @default(autoincrement()) |
クライアント
| クライアント | 型 | 説明 |
|---|---|---|
| Prisma Client JS | BigInt | BigIntの操作例を参照してください。 |
Float
浮動小数点数。
Floatはバージョン2.17.0以降でDoubleにマッピングされます。この変更の詳細については、リリースノートおよびビデオ: Prisma ORM 2.17.0でのFloatのデフォルトマッピングの変更を参照してください。
デフォルトの型マッピング
| コネクタ | デフォルトのマッピング |
|---|---|
| PostgreSQL | double precision |
| SQL Server | float(53) |
| MySQL | DOUBLE |
| MongoDB | Double |
| SQLite | REAL |
| CockroachDB | DOUBLE 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
デフォルトの型マッピング
| コネクタ | デフォルトのマッピング |
|---|---|
| PostgreSQL | decimal(65,30) |
| SQL Server | decimal(32,16) |
| MySQL | DECIMAL(65,30) |
| MongoDB | サポートされていません |
| SQLite | DECIMAL |
| CockroachDB | DECIMAL |
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 JS | Decimal | Decimalの操作例を参照してください。 |
DateTime
備考
- Prisma Clientはすべての
DateTimeをネイティブのDateオブジェクトとして返します。 - 現在、Prisma ORMはMySQLのゼロ日付(
0000-00-00 00:00:00、0000-00-00、00:00:00)をサポートしていません。 - 現在、
DateTime値を文字列として渡すことを許可せず、渡すとランタイムエラーが発生するバグがあります。DateTime値はDateオブジェクト(つまり、'2024-12-04'ではなくnew Date('2024-12-04'))として渡す必要があります。
詳細情報と例については、このセクションを参照してください: DateTimeの操作。
デフォルトの型マッピング
| コネクタ | デフォルトのマッピング |
|---|---|
| PostgreSQL | timestamp(3) |
| SQL Server | datetime2 |
| MySQL | DATETIME(3) |
| MongoDB | Timestamp |
| SQLite | NUMERIC |
| CockroachDB | TIMESTAMP |
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の場合、以下のいずれかの形式を使用する必要があります
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オブジェクト。
デフォルトの型マッピング
| コネクタ | デフォルトのマッピング |
|---|---|
| PostgreSQL | jsonb |
| SQL Server | サポートされていません |
| MySQL | JSON |
| MongoDB | 有効なBSONオブジェクト (Relaxedモード) |
| SQLite | JSONB |
| CockroachDB | JSONB |
PostgreSQL
| ネイティブデータベース型 | ネイティブデータベース型属性 | 注釈 |
|---|---|---|
json | @db.Json | |
jsonb | @db.JsonB |
MySQL
| ネイティブデータベース型 | ネイティブデータベース型属性 | 注釈 |
|---|---|---|
JSON | @db.Json |
MongoDB
Microsoft SQL Server
Microsoft SQL ServerにはJSONに特化したデータ型はありません。ただし、JSONを読み書きするための組み込み関数が多数あります。
SQLite
サポートされていません
CockroachDB
| ネイティブデータベース型 | ネイティブデータベース型属性 | 注釈 |
|---|---|---|
JSON | JSONB | @db.JsonB |
クライアント
| Prisma Client JS |
|---|
object |
Bytes
Bytesはバージョン2.17.0以降で利用可能です。
デフォルトの型マッピング
| コネクタ | デフォルトのマッピング |
|---|---|
| PostgreSQL | bytea |
| SQL Server | varbinary |
| MySQL | LONGBLOB |
| MongoDB | BinData |
| SQLite | BLOB |
| CockroachDB | BYTES |
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 JS | Uint8Array | Bytesの操作例を参照してください。 |
| Prisma Client JS (v6以前) | Buffer | Bytesの操作例を参照してください。 |
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
- スカラーリストはサポートされています
例
スカラーリストを定義する
- リレーショナルデータベース
- MongoDB
model User {
id Int @id @default(autoincrement())
favoriteColors String[]
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
favoriteColors String[]
}
デフォルト値を持つスカラーリストを定義する
バージョン4.0.0以降で利用可能です。
- リレーショナルデータベース
- MongoDB
model User {
id Int @id @default(autoincrement())
favoriteColors String[] @default(["red", "blue", "green"])
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
favoriteColors String[] @default(["red", "blue", "green"])
}
?修飾子
フィールドをオプションにします。
備考
- リストフィールド(例:
Posts[])と併用することはできません
例
オプションのnameフィールド
model User {
id Int @id @default(autoincrement())
name String?
}
属性
属性は、フィールドまたはブロック(例:モデル)の動作を変更します。データモデルに属性を追加するには2つの方法があります
- フィールド属性は
@で始まる - ブロック属性は
@@で始まる
一部の属性は引数を取ります。属性内の引数は常に名前付きですが、ほとんどの場合、引数名**を省略できます**。
注: シグネチャの先頭のアンダースコアは、引数名が省略可能であることを意味します。
@id
モデルに単一フィールドIDを定義します。
備考
一般
- リレーションフィールドには定義できません
- オプションにすることはできません
リレーショナルデータベース
-
対応するデータベースの構造:
PRIMARY KEY -
任意のスカラーフィールド(
String、Int、enum)に定義できます
MongoDB
-
対応するデータベースの構造: 配列を除く任意の有効なBSON型
-
すべてのモデルは
@idフィールドを定義する必要があります -
基になるIDフィールド名は常に
_idであり、@map("_id")でマッピングする必要があります -
データベースで
ObjectIdを使用しない限り、任意のスカラーフィールド(String、Int、enum)に定義できます -
ObjectIdをIDとして使用するには、以下を行う必要があります -
cuid()、uuid()、ulid()はサポートされていますが、有効なObjectIdを生成しません。@idには代わりにauto()を使用してください。 -
autoincrement()は**サポートされていません**
引数
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
map | いいえ | String | データベース内の基になる主キー制約の名前。 MySQLまたはMongoDBではサポートされていません。 |
length | いいえ | number | インデックス付けされる値のサブパートの最大長を指定できます。 MySQLのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。 |
sort | いいえ | String | IDのエントリがデータベースに格納される順序を指定できます。利用可能なオプションはAscとDescです。SQL Serverのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。 |
clustered | いいえ | Boolean | IDがクラスタ化されるか、非クラスタ化されるかを定義します。デフォルトは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()値を生成する
- リレーショナルデータベース
- MongoDB
model User {
id String @id @default(cuid())
name String
}
model User {
id String @id @default(cuid()) @map("_id")
name String
}
idフィールドがObjectId型の場合、cuid()を使用してデフォルト値を生成することはできません。有効なObjectIdを生成するには、以下の構文を使用してください
id String @id @default(auto()) @db.ObjectId @map("_id")
IDとしてuuid()値を生成する
- リレーショナルデータベース
- MongoDB
model User {
id String @id @default(uuid())
name String
}
model User {
id String @id @default(uuid()) @map("_id")
name String
}
idフィールドがObjectId型の場合、uuid()を使用してデフォルト値を生成することはできません。有効なObjectIdを生成するには、以下の構文を使用してください
id String @id @default(auto()) @db.ObjectId @map("_id")
IDとしてulid()値を生成する
- リレーショナルデータベース
- MongoDB
model User {
id String @id @default(ulid())
name String
}
model User {
id String @id @default(ulid()) @map("_id")
name String
}
idフィールドがObjectId型の場合、ulid()を使用してデフォルト値を生成することはできません。有効なObjectIdを生成するには、以下の構文を使用してください
id String @id @default(auto()) @db.ObjectId @map("_id")
デフォルト値なしの単一フィールドID
次の例では、idにデフォルト値がありません
- リレーショナルデータベース
- MongoDB
model User {
id String @id
name String
}
model User {
id String @id @map("_id") @db.ObjectId
name String
}
model User {
id String @id @map("_id")
name String
}
なお、上記の場合、Prisma Clientを使用してUserモデルの新しいレコードを作成する際には、独自のID値を必ず指定する必要があります。例:
const newUser = await prisma.user.create({
data: {
id: 1,
name: "Alice",
},
});
デフォルト値を持たないリレーションスカラフィールドにIDを指定する
次の例では、authorIdはリレーションスカラとProfileのIDの両方です
- リレーショナルデータベース
- MongoDB
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?
}
model Profile {
authorId String @id @map("_id") @db.ObjectId
author User @relation(fields: [authorId], references: [id])
bio String
}
model User {
id String @id @map("_id") @db.ObjectId
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属性で注釈を付けることができます - オプションにすることはできません
- 任意のスカラーフィールド(
String、Int、enum)に定義できます - リレーションフィールドには定義できません
- Prisma Clientにおける複合IDフィールドの名前は以下のパターンになります:
field1_field2_field3
引数
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
fields | はい | FieldReference[] | フィールド名のリスト — 例:["firstname", "lastname"] |
name | いいえ | String | Prisma Clientがすべてのフィールドをカバーする引数として公開する名前。例:fullName: { firstName: "First", lastName: "Last"}におけるfullName |
map | いいえ | String | データベース内の基になる主キー制約の名前。 MySQLではサポートされていません。 |
length | いいえ | number | インデックス付けされる値のサブパートの最大長を指定できます。 MySQLのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。 |
sort | いいえ | String | IDのエントリがデータベースに格納される順序を指定できます。利用可能なオプションはAscとDescです。SQL Serverのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。 |
clustered | いいえ | Boolean | IDがクラスタ化されるか、非クラスタ化されるかを定義します。デフォルトは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])
}
ユーザーを作成する際、firstNameとlastNameの一意の組み合わせを指定する必要があります
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レコードを作成する際には、firstName、lastName、isAdminの値の一意の組み合わせを指定する必要があります
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")または以下の関数のいずれかになりますautoincrement()sequence()(CockroachDBのみ)dbgenerated(...)cuid()cuid(2)uuid()uuid(4)uuid(7)ulid()nanoid()now()
- Prismaスキーマではまだ表現できないデフォルト値は、イントロスペクションを使用する際に
dbgenerated(...)関数によって表現されます。 - Prismaスキーマのリレーションフィールドではデフォルト値は許可されません。ただし、リレーションをバックアップするフィールド(
@relation属性のfields引数にリストされているフィールド)にはデフォルト値を定義できます。リレーションをバックアップするフィールドにデフォルト値が設定されている場合、そのリレーションは自動的に入力されます。 - デフォルト値は、ネイティブでサポートするデータベースのスカラーリストで使用できます。
- JSONデータ。
@default属性内でJSONは二重引用符で囲む必要があります(例:@default("[]"))。JSONオブジェクトを提供したい場合は、二重引用符で囲み、内部の二重引用符をバックスラッシュでエスケープする必要があります(例:@default("{ \"hello\": \"world\" }"))。
MongoDB
- デフォルト値は静的な値(
4、"hello")または以下の関数のいずれかになります
引数
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
value | はい | 式(例:5、true、now()) | |
map | いいえ | String | SQL 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のデフォルト値
- リレーショナルデータベース
- MongoDB
model User {
email String @unique
profileViews Int @default(0)
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
profileViews Int @default(0)
}
Floatのデフォルト値
- リレーショナルデータベース
- MongoDB
model User {
email String @unique
number Float @default(1.1)
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
number Float @default(1.1)
}
Decimalのデフォルト値
- リレーショナルデータベース
- MongoDB
model User {
email String @unique
number Decimal @default(22.99)
}
BigIntのデフォルト値
- リレーショナルデータベース
- MongoDB
model User {
email String @unique
number BigInt @default(34534535435353)
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
number BigInt @default(34534535435353)
}
Stringのデフォルト値
- リレーショナルデータベース
- MongoDB
model User {
email String @unique
name String @default("")
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
name String @default("")
}
Booleanのデフォルト値
- リレーショナルデータベース
- MongoDB
model User {
email String @unique
isAdmin Boolean @default(false)
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
isAdmin Boolean @default(false)
}
DateTimeのデフォルト値
DateTimeの静的なデフォルト値はISO 8601標準に基づいている点にご注意ください。
- リレーショナルデータベース
- MongoDB
model User {
email String @unique
data DateTime @default("2020-03-19T14:21:00+02:00")
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
data DateTime @default("2020-03-19T14:21:00+02:00")
}
Bytesのデフォルト値
- リレーショナルデータベース
- MongoDB
model User {
email String @unique
secret Bytes @default("SGVsbG8gd29ybGQ=")
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
secret Bytes @default("SGVsbG8gd29ybGQ=")
}
enumのデフォルト値
- リレーショナルデータベース
- MongoDB
enum Role {
USER
ADMIN
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
role Role @default(USER)
posts Post[]
profile Profile?
}
enum Role {
USER
ADMIN
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String @unique
name String?
role Role @default(USER)
posts Post[]
profile Profile?
}
スカラーリストのデフォルト値
- リレーショナルデータベース
- MongoDB
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
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
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
- MongoDBの一意インデックスによって強制されます
引数
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
map | いいえ | String | |
length | いいえ | number | インデックス付けされる値のサブパートの最大長を指定できます。 MySQLのみ。バージョン3.5.0以降でプレビュー、バージョン4.0.0以降で一般公開されています。 |
sort | いいえ | String | 制約のエントリがデータベースに格納される順序を指定できます。利用可能なオプションはAscとDescです。バージョン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フィールドに一意属性を指定する
- リレーショナルデータベース
- MongoDB
model User {
email String @unique
name String
}
model User {
id String @default(auto()) @map("_id") @db.ObjectId
name String
}
オプションのStringフィールドに一意属性を指定する
- リレーショナルデータベース
- MongoDB
model User {
id Int @id @default(autoincrement())
email String? @unique
name String
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String? @unique
name String
}
リレーションスカラフィールドauthorIdに一意属性を指定する
- リレーショナルデータベース
- MongoDB
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[]
}
model Post {
author User @relation(fields: [authorId], references: [id])
authorId String @unique @db.ObjectId
title String
published Boolean @default(false)
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String? @unique
name String
Post Post[]
}
cuid()値をデフォルト値として使用して一意属性を指定する
- リレーショナルデータベース
- MongoDB
model User {
token String @unique @default(cuid())
name String
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
token String @unique @default(cuid())
name String
}
@@unique
指定されたフィールドの複合一意制約を定義します。
備考
一般
-
一意制約を構成するすべてのフィールドは、必須フィールドである必要があります。
idがnullになる可能性があるため、以下のモデルは無効です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 | 制約のエントリがデータベースに格納される順序を指定できます。利用可能なオプションはAscとDescです。バージョン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")
lengthとsort引数は関連するフィールド名に追加されます
@@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フィールドに複数フィールドの一意属性を指定する
- リレーショナルデータベース
- MongoDB
model User {
id Int @default(autoincrement())
firstName String
lastName String
isAdmin Boolean @default(false)
@@unique([firstName, lastName])
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
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フィールドに複数フィールドの一意属性を指定する
- リレーショナルデータベース
- MongoDB
model User {
id Int @default(autoincrement())
firstName String
lastName String
isAdmin Boolean @default(false)
@@unique([firstName, lastName, isAdmin])
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
firstName String
lastName String
isAdmin Boolean @default(false)
@@unique([firstName, lastName, isAdmin])
}
リレーションフィールドを含む複数フィールドの一意属性を指定する
- リレーショナルデータベース
- MongoDB
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[]
}
model Post {
id String @id @default(auto()) @map("_id") @db.ObjectId
author User @relation(fields: [authorId], references: [id])
authorId String @db.ObjectId
title String
published Boolean @default(false)
@@unique([authorId, title])
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String @unique
posts Post[]
}
複数フィールドの一意属性にカスタムnameを指定する
- リレーショナルデータベース
- MongoDB
model User {
id Int @default(autoincrement())
firstName String
lastName String
isAdmin Boolean @default(false)
@@unique(fields: [firstName, lastName, isAdmin], name: "admin_identifier")
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
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を使用してインデックスを同時作成する
- インデックスフィールドを式として定義する(例:
- PostgreSQLとCockroachDB
Prismaスキーマでこれらのオプションを設定することはできませんが、データベースレベルで直接設定することは可能です。
MongoDB
- バージョン
3.12.0以降では、@@index([compositeType.field])の構文を使用して複合型のフィールドにインデックスを定義できます。詳細については「複合型インデックスの定義」を参照してください。
引数
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
fields | はい | FieldReference[] | フィールド名のリスト — 例:["firstname", "lastname"] |
name | いいえ | String | Prisma 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 | インデックスまたは制約のエントリがデータベースに格納される順序を指定できます。利用可能なオプションはascとdescです。バージョン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でGist、Gin、SpGist、Brinメソッドが追加されました。バージョン4.0.0以降で一般提供されています。 |
ops | いいえ | identifier または function | 特定のインデックスタイプに対してインデックス演算子を定義できます。 PostgreSQLのみ。バージョン3.14.0以降でプレビュー、バージョン4.0.0以降で一般提供されています。 |
@@index属性のfields引数の名前は省略できます
@@index(fields: [title, author])
@@index([title, author])
lengthとsort引数は関連するフィールド名に追加されます
@@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属性が必要です
引数
| 名前 | 型 | 必須 | 説明 | 例 |
|---|---|---|---|---|
name | String | 場合によっては(例:リレーションの曖昧さを解消するためなど) | リレーションシップの名前を定義します。多対多リレーションでは、基となるリレーションテーブルの名前も決定します。 | "CategoryOnPost"、"MyRelation" |
fields | FieldReference[] | アノテーション付きリレーションフィールドで | 現在のモデルのフィールドリスト | ["authorId"]、["authorFirstName, authorLastName"] |
references | FieldReference[] | アノテーション付きリレーションフィールドで | リレーションの反対側にあるモデルのフィールドリスト | ["id"]、["firstName, lastName"] |
map | String | いいえ | データベース内の外部キーにカスタム名を定義します。 | ["id"]、["firstName, lastName"] |
onUpdate | Enum。参照アクションのタイプで値を確認してください。 | いいえ | 参照されるモデル内の参照されるエントリが更新されるときに実行する参照アクションを定義します。 | Cascade、NoAction |
onDelete | Enum。参照アクションのタイプで値を確認してください。 | いいえ | 参照されるモデル内の参照されるエントリが削除されるときに実行する参照アクションを定義します。 | Cascade、NoAction |
@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をどのように変更するかについては、「カスタムモデル名とフィールド名の使用」を参照してください。
備考
一般
@mapはデータベース内の列/フィールドの名前を変更しません@mapは生成されたクライアントのフィールド名を変更します
MongoDB
あなたの@idフィールドには@map("_id")を含める必要があります。例:
model User {
id String @default(auto()) @map("_id") @db.ObjectId
}
引数
| 名前 | 型 | 必須 | 説明 | 例 |
|---|---|---|---|---|
name | String | はい | データベースの列(リレーショナルデータベース)またはドキュメントフィールド(MongoDB)の名前。 | "comments"、"someFieldName" |
@map属性のname引数の名前は省略できます
@map(name: "is_admin")
@map("users")
シグネチャ
@map(_ name: String)
例
firstNameフィールドをfirst_nameという名前の列にマッピングする
- リレーショナルデータベース
- MongoDB
model User {
id Int @id @default(autoincrement())
firstName String @map("first_name")
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
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をどのように変更するかについては、「カスタムモデル名とフィールド名の使用」を参照してください。
引数
| 名前 | 型 | 必須 | 説明 | 例 |
|---|---|---|---|---|
name | String | はい | データベースのテーブル(リレーショナルデータベース)またはコレクション(MongoDB)の名前。 | "comments"、"someTableOrCollectionName" |
@@map属性のname引数の名前は省略できます
@@map(name: "users")
@@map("users")
シグネチャ
@@map(_ name: String)
例
Userモデルをusersという名前のデータベーステーブル/コレクションにマッピングする
- リレーショナルデータベース
- MongoDB
model User {
id Int @id @default(autoincrement())
name String
@@map("users")
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
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レベルで実装されています
空の更新句を渡した場合、@updatedAtの値は変更されません。例えば
await prisma.user.update({
where: {
id: 1,
},
data: {}, //<- Empty update clause
});
引数
該当なし
シグネチャ
@updatedAt
例
- リレーショナルデータベース
- MongoDB
model Post {
id String @id
updatedAt DateTime @updatedAt
}
model Post {
id String @id @map("_id") @db.ObjectId
updatedAt DateTime @updatedAt
}
@ignore
Prisma Clientから除外したいフィールド(例えば、Prisma Clientユーザーに更新させたくないフィールド)に@ignoreを追加します。無視されたフィールドは生成されたPrisma Clientから除外されます。@defaultを持たない必須フィールドに対してこれを行うと、モデルのcreateメソッドは無効になります(データベースはそのデータなしではエントリを作成できないため)。
備考
- 2.17.0以降では、Prisma ORMはイントロスペクションを行う際に無効なモデルを参照するフィールドに自動的に
@ignoreを追加します。
例
次の例は、emailフィールドをPrisma Clientから除外するために手動で@ignoreを追加する方法を示しています
model User {
id Int @id
name String
email String @ignore // this field will be excluded
}
@@ignore
Prisma Clientから除外したいモデル(例えば、Prismaユーザーに更新させたくないモデル)に@@ignoreを追加します。無視されたモデルは生成されたPrisma Clientから除外されます。
備考
例
次の例では、Postモデルは一意の識別子を持たないため無効です。生成されたPrisma Client APIから除外するために@@ignoreを使用します
/// 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モデルは一意の識別子を持たないため無効であり、Userのpostsリレーションフィールドも無効なPostモデルを参照しているため無効です。生成されたPrisma Client APIからモデルとリレーションフィールドの両方を除外するために、Postモデルに@@ignoreを、Userのpostsリレーションフィールドに@ignoreを使用します
/// 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を追加して、そのモデルに関連付けられたテーブルがデータベース内のどのスキーマに含まれるべきかを指定します。
引数
| 名前 | 型 | 必須 | 説明 | 例 |
|---|---|---|---|---|
name | String | はい | データベーススキーマの名前。 | "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
この機能を使用するには、generatorにshardKeysプレビュー機能フラグが必要です
generator client {
provider = "prisma-client-js"
output = "../generated/prisma"
previewFeatures = ["shardKeys"]
}
@shardKey属性はPlanetScaleデータベースとのみ互換性があります。これにより、モデルのフィールドにシャードキーを定義できます
model User {
id String @default(uuid())
region String @shardKey
}
@@shardKey
この機能を使用するには、generatorにshardKeysプレビュー機能フラグが必要です
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
@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) -
データベースレベルで実装されており、データベーススキーマに現れ、イントロスペクションを通じて認識できることを意味します。データベースの実装
データベース 実装 PostgreSQL SERIAL型MySQL AUTO_INCREMENT属性SQLite AUTOINCREMENTキーワードCockroachDB SERIAL型
例
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()値を生成する
- リレーショナルデータベース
- MongoDB
model User {
id String @id @default(cuid())
name String
}
model User {
id String @id @default(cuid()) @map("_id")
name String
}
cuid2仕様に基づいてIDとしてcuid(2)値を生成する
- リレーショナルデータベース
- MongoDB
model User {
id String @id @default(cuid(2))
name String
}
model User {
id String @id @default(cuid(2)) @map("_id")
name String
}
uuid()
UUID仕様に基づいたグローバルに一意な識別子を生成します。Prisma ORMはバージョン4(デフォルト)と7をサポートしています。
備考
Stringと互換性があります。- Prisma ORMによって実装されているため、基となるデータベーススキーマでは「可視化」されません。イントロスペクションを使用している場合でも、Prismaスキーマを手動で変更し、Prisma Clientを生成することで
uuid()を使用できます。その場合、値はPrisma ORMのクエリエンジンによって生成されます。 - リレーショナルデータベースの場合:Prisma ORMの
uuid()関数を使用しない場合は、dbgeneratedを使用してネイティブデータベース関数を使用できます。 - MongoDBの場合:
uuid()は有効なObjectIdを生成しません。基となるデータベースでObjectIdを使用したい場合は、@db.ObjectId構文を使用できます。ただし、_idフィールドがObjectIdタイプでない場合は、引き続きuuid()を使用できます。
例
UUID v4を使用してIDとしてuuid()値を生成する
- リレーショナルデータベース
- MongoDB
model User {
id String @id @default(uuid())
name String
}
model User {
id String @id @default(uuid()) @map("_id")
name String
}
UUID v7を使用してIDとしてuuid(7)値を生成する
- リレーショナルデータベース
- MongoDB
model User {
id String @id @default(uuid(7))
name String
}
model User {
id String @id @default(uuid(7)) @map("_id")
name String
}
ulid()
ULID仕様に基づいた、ユニバーサルに一意で辞書順にソート可能な識別子を生成します。
備考
ulid()は、01ARZ3NDEKTSV4RRFFQ69G5FAVのような26文字の英数字文字列として表現される128ビットのランダムな識別子を生成します。
例
IDとしてulid()値を生成する
- リレーショナルデータベース
- MongoDB
model User {
id String @id @default(ulid())
name String
}
model User {
id String @id @default(ulid()) @map("_id")
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として生成する
- リレーショナルデータベース
- MongoDB
model User {
id String @id @default(nanoid())
name String
}
model User {
id String @id @default(nanoid()) @map("_id")
name String
}
16文字のnanoid()値をIDとして生成する
- リレーショナルデータベース
- MongoDB
model User {
id String @id @default(nanoid(16))
name String
}
model User {
id String @id @default(nanoid(16)) @map("_id")
name String
}
now()
レコードが作成された時刻のタイムスタンプを設定します。
備考
一般
DateTimeと互換性があります
4.4.0より前のバージョンでは、@updatedAtも使用している場合、データベースとアプリのタイムゾーンが異なる場合、時刻がnow()の値と異なる場合があります。これは、@updatedAtがPrisma ORMレベルで動作するのに対し、now()はデータベースレベルで動作するためです。
リレーショナルデータベース
-
データベースレベルで実装されており、データベーススキーマに現れ、イントロスペクションを通じて認識できることを意味します。データベースの実装
データベース 実装 PostgreSQL CURRENT_TIMESTAMPおよびnow()のようなエイリアスMySQL CURRENT_TIMESTAMPおよびnow()のようなエイリアスSQLite CURRENT_TIMESTAMPおよびdate('now')のようなエイリアスCockroachDB CURRENT_TIMESTAMPおよびnow()のようなエイリアス
MongoDB
- Prisma ORMレベルで実装されています
例
レコードが作成されたときに現在のタイムスタンプ値を設定する
- リレーショナルデータベース
- MongoDB
model User {
id String @id
createdAt DateTime @default(now())
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
createdAt DateTime @default(now())
}
dbgenerated(...)
Prismaスキーマでは表現できないデフォルト値(random()など)を表します。
備考
リレーショナルデータベース
-
任意のスカラ型と互換性があります
-
2.21.0以降では空文字列
dbgenerated("")は不可 -
2.17.0以降では
String値を受け入れ、これにより以下が可能になります -
dbgenerated(...)内の文字列値は、DBが返すデフォルト値と一致しない場合があります。これは、文字列などの値が明示的にキャストされる(例:'hello'::STRING)ためです。不一致がある場合、Prisma Migrateはまだマイグレーションが必要であることを示します。prisma db pullを使用して正しい値を推論し、不一致を解決できます。(関連する問題)
例
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、""、Bob、now()、cuid()
enum
Microsoft SQL Serverではサポートされていません
Microsoft SQL Serverコネクタはenumタイプをサポートしていません。
enumを定義します。
備考
- EnumはPostgreSQLとMySQLでネイティブにサポートされています
- EnumはSQLiteとMongoDBではPrisma ORMレベルで実装および強制されます
命名規則
- Enum名は文字で始まる必要があります(通常、パスカルケースで表記されます)
- Enumは単数形を使用する必要があります(例:
role、roles、RolesではなくRole)。 - 次の正規表現に従う必要があります:
[A-Za-z][A-Za-z0-9_]*
例
2つの可能な値を持つenumを指定する
- リレーショナルデータベース
- MongoDB
enum Role {
USER
ADMIN
}
model User {
id Int @id @default(autoincrement())
role Role
}
enum Role {
USER
ADMIN
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
role Role
}
2つの可能な値を持つenumを指定し、デフォルト値を設定する
- リレーショナルデータベース
- MongoDB
enum Role {
USER
ADMIN
}
model User {
id Int @id @default(autoincrement())
role Role @default(USER)
}
enum Role {
USER
ADMIN
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
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
}