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 プロパティは、バージョン5.1.0以降のPrisma Studioでサポートされています。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スキーマでジェネレーターを定義します。
フィールド
generator
ブロックは、次のフィールドを受け入れます。
名前 | 必須 | 型 | 説明 |
---|---|---|---|
provider | はい | 文字列 (ファイルパス) または Enum (prisma-client-js | prisma-client ) |
output | いいえ* | 文字列 (ファイルパス) | 生成されたクライアントの場所を決定します。詳細はこちらをご覧ください。デフォルト: node_modules/.prisma/client |
previewFeatures | いいえ | Enumのリスト | 現在利用可能なプレビュー機能のリストを表示するには、インテリセンスを使用してください(Visual Studio CodeでCtrl+Space )。デフォルト: なし |
engineType | いいえ | Enum (library または binary ) | ダウンロードして使用するクエリエンジンのタイプを定義します。デフォルト: library |
binaryTargets | いいえ | Enumのリスト (下記参照) | クエリエンジンの互換性を確保するために、Prisma Clientが実行されるOSを指定します。デフォルト: native |
カスタム出力パスを定義し、そのパスを.gitignore
に追加し、カスタムビルドスクリプトまたはpostinstallフック経由でprisma generate
を実行するようにしてください。
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 |
例
デフォルトのoutput
、previewFeatures
、engineType
、binaryTargets
でprisma-client-js
ジェネレーターを指定する
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
を指定する
この例では、上記の表に基づいて、Ubuntu 19.04 (disco)
上でPrisma Clientを実行するように構成する方法を示します。
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
、user
、users
、Users
ではなく)。 - 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) | |
"char" | @db.CatalogSingleChar | |
BIT(x) | @db.Bit(x) | |
VARBIT | @db.VarBit | |
UUID | @db.Uuid | |
INET | @db.Inet |
PostgreSQLでサポートされているxml
型とcitext
型は、現在CockroachDBではサポートされていないことに注意してください。
クライアント
Prisma Client JS |
---|
string |
Boolean
真または偽の値。
デフォルトの型マッピング
コネクタ | デフォルトのマッピング |
---|---|
PostgreSQL | boolean |
SQL Server | bit |
MySQL | TINYINT(1) |
MongoDB | Bool |
SQLite | INTEGER |
CockroachDB | BOOL |
PostgreSQL
ネイティブデータベース型 | ネイティブデータベース型属性 | 注 |
---|---|---|
boolean | @db.Boolean |
MySQL
ネイティブデータベース型 | ネイティブデータベース型属性 | 注 |
---|---|---|
TINYINT(1) | @db.TinyInt(1) | 最大長が1より大きい(例えば、TINYINT(2) )またはデフォルト値が1 、0 、NULL 以外の何らかの値である場合、TINYINT は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 | 最大長が1より大きい(例えば、TINYINT(2) )またはデフォルト値が1 、0 、NULL 以外の何らかの値である場合、TINYINT は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 | int はint4 のエイリアスであるPostgreSQLとは異なることに注意してください |
bigserial | serial8 | @db.Int8 @default(autoincrement()) |
クライアント
Client | 型 | 説明 |
---|---|---|
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
(精度) は、格納される10進数の最大合計桁数です。s
(スケール) は、小数点以下の桁数です。
MySQL
ネイティブデータベース型 | ネイティブデータベース型属性 | 注 |
---|---|---|
DECIMAL | NUMERIC | @db.Decimal(p, s) † |
- †
p
(精度) は、格納される10進数の最大合計桁数です。s
(スケール) は、小数点以下の桁数です。
MongoDB
Microsoft SQL Server
ネイティブデータベース型 | ネイティブデータベース型属性 | 注 |
---|---|---|
decimal | numeric | @db.Decimal(p, s) † |
- †
p
(精度) は、格納される10進数の最大合計桁数です。s
(スケール) は、小数点以下の桁数です。
SQLite
DECIMAL
(2.17.0 で REAL
から変更)
CockroachDB
ネイティブデータベース型 | ネイティブデータベース型属性 | 注 |
---|---|---|
DECIMAL | DEC | NUMERIC | @db.Decimal(p, s) † | |
money | 未対応 | PostgreSQL の money 型は CockroachDB ではまだサポートされていません |
- †
p
(精度) は、格納される10進数の最大合計桁数です。s
(スケール) は、小数点以下の桁数です。
クライアント
Client | 型 | 説明 |
---|---|---|
Prisma Client JS | Decimal | 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 オブジェクト (リラックスモード) |
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 |
クライアント
Client | 型 | 説明 |
---|---|---|
Prisma Client JS | Uint8Array | Bytes の操作例については、Bytes の操作 を参照してください |
Prisma Client JS (v6 より前) | Buffer | Bytes の操作例については、Bytes の操作 を参照してください |
Unsupported
MongoDB でサポートされていません
MongoDB コネクタ は Unsupported
型をサポートしていません。
Unsupported
型は 2.17.0 で導入され、Prisma Client でサポートされていないデータ型を Prisma スキーマで表現できます。Unsupported
型のフィールドは、イントロスペクション (prisma db pull
) で作成したり、手動で記述したり、Prisma Migrate または db push
でデータベースに作成したりできます。
注釈
-
Unsupported
型のフィールドは、生成されたクライアントでは利用できません。 -
モデルに**必須**の
Unsupported
型が含まれている場合、prisma.model.create(..)
、prisma.model.update(...)
、およびprisma.model.upsert(...)
は Prisma Client で利用できません。 -
サポートされていない型を含むデータベースをイントロスペクションすると、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
) で定義できます -
ID として
ObjectId
を使用するには、次のようにする必要があります -
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 が clustered か non-clustered かを定義します。デフォルトは true です。SQL Server のみ。バージョン 3.13.0 以降でプレビュー、バージョン 4.0.0 以降で一般提供。 |
シグネチャ
@id(map: String?, length: number?, sort: String?, clustered: Boolean?)
注: バージョン 4.0.0 より前、または
extendedIndexes
Preview 機能が有効になっている 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 が clustered か non-clustered かを定義します。デフォルトは 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 データ。JSON は
@default
属性内で二重引用符で囲む必要があることに注意してください。例:@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
のないモデルで唯一の一意性制約を表す場合、必須 でなければなりません。- 1つのモデルは任意の数の一意性制約を持つことができます。
- 任意のスカラーフィールドで定義できます。
- リレーションフィールドでは定義できません。
リレーショナルデータベース
- 対応するデータベース構成要素:
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 | 制約が clustered か non-clustered かを定義します。デフォルトは false です。SQL Server のみ。バージョン 3.13.0 以降でプレビュー、バージョン 4.0.0 以降で一般提供。 |
- ¹ インデックスおよびフィールドタイプの一部で必須となる場合があります。
署名
@unique(map: String?, length: number?, sort: String?)
注: バージョン 4.0.0 より前、または
extendedIndexes
Preview 機能が有効になっている 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 -
1つのモデルは任意の数の
@@unique
ブロックを持つことができます。
リレーショナルデータベース
- 対応するデータベース構成要素:
UNIQUE
@@unique
ブロックは、@id
/@@id
のないモデルで唯一のユニーク制約を表す場合に必要です。- ユニーク制約を追加すると、指定された列に自動的に対応するユニークインデックスが追加されます。
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 | 制約が clustered か non-clustered かを定義します。デフォルトは 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
Preview 機能が有効になっているバージョン 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 | インデックスが clustered か non-clustered かを定義します。デフォルトは 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
属性の name 引数の名前は省略できます。
@@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 | 場合によっては(リレーションを明確にするためなど) | リレーションシップの名前を定義します。m-n リレーションでは、基盤となるリレーションテーブルの名前も決定します。 | "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 レベルで実装されています。
now()
も使用している場合、データベースとアプリでタイムゾーンが異なる場合、時刻が @updatedAt
値と異なる場合があります。これは、@updatedAt
が Prisma ORM レベルで動作し、now()
がデータベースレベルで動作するために発生します。
空の更新句を渡すと、@updatedAt 値は変更されません。例:
await prisma.user.update({
where: {
id: 1,
},
data: {}, //<- Empty update clause
});
引数
N/A
署名
@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
モデルはユニーク識別子がないため無効です。@@ignore
を使用して、生成された Prisma Client API から除外します。
/// 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
モデルを参照しているため無効です。Post
モデルで @@ignore
を使用し、User
の posts
リレーションフィールドで @ignore
を使用して、モデルとリレーションフィールドの両方を生成された Prisma Client API から除外します。
/// 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
機能の使用に関する詳細については、こちらのガイドを参照してください。
属性関数
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()
は、26文字の英数字文字列として表現される128ビットのランダム識別子を生成します。例:01ARZ3NDEKTSV4RRFFQ69G5FAV
例
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倍小さく、130バイトに対して423バイトです。
注釈
String
と互換性があります。- Prisma ORMによって実装されているため、基盤となるデータベーススキーマでは「表示」されません。イントロスペクションを使用する場合でも、Prismaスキーマを手動で変更し、Prisma Clientを生成することで、
uuid()
を使用できます。その場合、値はPrisma ORMのクエリエンジンによって生成されます。 - MongoDBの場合:
nanoid()
は有効なObjectId
を生成しません。基盤となるデータベースでObjectId
を使用したい場合は、@db.ObjectId
構文を使用できます。ただし、_id
フィールドがObjectId
型でない場合は、nanoid()
を引き続き使用できます。
例
IDとして21文字のnanoid()
値を生成
- リレーショナルデータベース
- MongoDB
model User {
id String @id @default(nanoid())
name String
}
model User {
id String @id @default(nanoid()) @map("_id")
name String
}
IDとして16文字のnanoid()
値を生成
- リレーショナルデータベース
- 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
と互換性があります
@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
を使用して、不一致を解決するための正しい値を推測できます。(関連 issue)
例
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名は文字で始める必要があります(通常、PascalCaseで記述されます)
- 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以降で使用できます。
複合型を定義します。
命名規則
型名は次の条件を満たす必要があります
- 文字で始まる(通常、PascalCaseで記述されます)
- 次の正規表現に従う:
[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
}