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",
},
});
Role
enumを、データベース内の_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
}