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

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 mysqldatasource dataなど)を付けることができます。

PostgreSQLデータソースの指定

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

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

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

環境変数経由でのPostgreSQLデータソースの指定

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

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

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

そのための1つの方法は、次の内容で.envファイルを作成することです。ファイルがPrisma CLIによって自動的にピックアップされるためには、schema.prismaファイルと同じディレクトリにある必要があります。

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

MySQLデータソースの指定

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

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

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

MongoDBデータソースの指定

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

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

SQLiteデータソースの指定

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

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

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

CockroachDBデータソースの指定

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

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

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

generator

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

フィールド

generatorブロックは、次のフィールドを受け入れます。

名前必須説明
providerはい文字列 (ファイルパス) または Enum (prisma-client-jsprisma-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
ビルドOSPrismaエンジンビルド名
macOS Intel x86_64darwin
macOS ARM64darwin-arm64
Windows
ビルドOSPrismaエンジンビルド名
Windowswindows
Linux (x86_64アーキテクチャ上のAlpine)
ビルドOSPrismaエンジンビルド名OpenSSL
Alpine (3.17以降)linux-musl-openssl-3.0.x*3.0.x
Alpine (3.16以前)linux-musl1.1.x

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

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

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

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

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

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

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

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

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

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

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

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

この例では、上記の表に基づいて、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 モデルを定義します。

備考

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

命名規則

  • モデル名は、次の正規表現に従う必要があります。[A-Za-z][A-Za-z0-9_]*
  • モデル名は文字で始まり、通常はPascalCaseでスペルされます。
  • モデル名には単数形を使用する必要があります(例えば、UseruserusersUsersではなく)。
  • Prisma ORMには、Prisma ORMが内部で使用しているため、モデル名として使用できない多数の予約語があります。予約語は、こちらこちらにあります。

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

フィールドの順序

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

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

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

model フィールド

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

備考

命名規則

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

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

model フィールドのスカラー型

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

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

String

可変長のテキスト。

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

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

PostgreSQL

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

MySQL

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

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

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

MongoDB

String

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

Microsoft SQL Server

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

SQLite

TEXT

CockroachDB

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

PostgreSQLでサポートされているxml型とcitext型は、現在CockroachDBではサポートされていないことに注意してください。

クライアント

Prisma Client JS
string

Boolean

真または偽の値。

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

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

PostgreSQL

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

MySQL

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

MongoDB

Bool

Microsoft SQL Server

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

SQLite

INTEGER

CockroachDB

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

クライアント

Prisma Client JS
boolean

Int

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

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

PostgreSQL

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

MySQL

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

MongoDB

Int

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

Microsoft SQL Server

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

SQLite

INTEGER

CockroachDB

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

クライアント

Prisma Client JS
number

BigInt

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

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

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

PostgreSQL

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

MySQL

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

MongoDB

Long

Microsoft SQL Server

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

SQLite

INTEGER

CockroachDB

ネイティブデータベース型ネイティブデータベース型属性
BIGINT | INT | INT8@db.Int8intint4のエイリアスであるPostgreSQLとは異なることに注意してください
bigserial | serial8@db.Int8 @default(autoincrement())

クライアント

Client説明
Prisma Client JSBigIntBigIntの操作例を参照してください

Float

浮動小数点数。

Float2.17.0以降でDoubleにマッピングされます。この変更の詳細については、リリースノートビデオ: Prisma ORM 2.17.0でのFloatのデフォルトマッピングの変更をご覧ください。

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

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

PostgreSQL

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

MySQL

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

MongoDB

Double

Microsoft SQL Server

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

SQLiteコネクタ

REAL

CockroachDB

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

クライアント

Prisma Client JS
number

Decimal

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

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

PostgreSQL

ネイティブデータベース型ネイティブデータベース型属性
decimal | numeric@db.Decimal(p, s)
money@db.Money
  • p (精度) は、格納される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 JSDecimalDecimal の操作例については、Decimal の操作 を参照してください

DateTime

注釈

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

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

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

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

PostgreSQL

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

MySQL

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

MySQL の YEAR 型を Int と共に使用することもできます

yearField     Int    @db.Year

MongoDB

Timestamp

Microsoft SQL Server

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

SQLite

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

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

CockroachDB

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

クライアント

Prisma Client JS
Date

Json

JSON オブジェクト。

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

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

PostgreSQL

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

MySQL

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

MongoDB

有効な BSON オブジェクト (リラックスモード)

Microsoft SQL Server

Microsoft SQL Server には JSON 用の特定のデータ型はありません。ただし、JSON の読み取りと変更のための組み込み関数が多数あります

SQLite

サポートされていません

CockroachDB

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

クライアント

Prisma Client JS
object

Bytes

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

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

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

PostgreSQL

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

MySQL

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

MongoDB

BinData

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

Microsoft SQL Server

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

SQLite

BLOB

CockroachDB

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

クライアント

Client説明
Prisma Client JSUint8ArrayBytes の操作例については、Bytes の操作 を参照してください
Prisma Client JS (v6 より前)BufferBytes の操作例については、Bytes の操作 を参照してください

Unsupported

warning

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
  • スカラーリストはサポートされています

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

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

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

? 修飾子

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

注釈

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

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

属性

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

  • フィールド属性は @ が接頭辞として付きます
  • ブロック属性は @@ が接頭辞として付きます

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

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

@id

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

注釈

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

  • ID を自動生成する関数を使用する@default 属性でアノテーションを付けることができます

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

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

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

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

  • データベースで ObjectId を使用する場合を除き、任意のスカラーフィールド (StringIntenum) で定義できます

  • ID として ObjectId を使用するには、次のようにする必要があります

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

    • フィールドに @db.ObjectId でアノテーションを付ける

      id   String  @db.ObjectId  @map("_id")
    • オプションで、ObjectId を自動生成するためにauto() 関数を使用する@default 属性でフィールドにアノテーションを付ける

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

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

引数

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

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

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

SQL Server のみ。バージョン 3.5.0 以降でプレビュー、バージョン 4.0.0 以降で一般提供。
clusteredいいえBooleanID が 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() 値を生成する
model User {
id String @id @default(cuid())
name String
}
ID として uuid() 値を生成する
model User {
id String @id @default(uuid())
name String
}
ID として ulid() 値を生成する
model User {
id String @id @default(ulid())
name String
}
デフォルト値なしの単一フィールド ID

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

model User {
id String @id
name String
}

上記のケースでは、Prisma Client を使用して User モデルの新しいレコードを作成するときに、独自の ID 値を必ず指定する必要があることに注意してください。例:

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

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

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

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

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

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

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

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

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

@@id

warning

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

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

注釈

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

引数

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

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

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

SQL Server のみ。バージョン 3.5.0 以降でプレビュー、バージョン 4.0.0 以降で一般提供。
clusteredいいえBooleanID が 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])
}

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

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

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

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

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

新しい User レコードを作成するときは、firstNamelastName、および 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") または次の関数のいずれかになります
  • Prisma スキーマでまだ表現できないデフォルト値は、dbgenerated(...) 関数によって表されます。イントロスペクションを使用する場合です。
  • デフォルト値は、Prisma スキーマのリレーションフィールドでは許可されていません。ただし、リレーションをバックアップするフィールド (@relation 属性の fields 引数にリストされているフィールド) にデフォルト値を定義することはできます。リレーションをバックアップするフィールドのデフォルト値は、そのリレーションが自動的に入力されることを意味します。
  • デフォルト値は、ネイティブにサポートするデータベースのスカラーリストで使用できます。
  • JSON データ。JSON は @default 属性内で二重引用符で囲む必要があることに注意してください。例: @default("[]")。JSON オブジェクトを提供する場合、二重引用符で囲み、内部の二重引用符をバックスラッシュを使用してエスケープする必要があります。例: @default("{ \"hello\": \"world\" }")
MongoDB
  • デフォルト値は、静的な値 (4"hello") または次の関数のいずれかになります

引数

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

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

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

シグネチャ

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

: バージョン 3.0.0 まで、シグネチャは次のとおりでした

@default(_ value: Expression)

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

DateTime の静的なデフォルト値は、ISO 8601 規格に基づいていることに注意してください。

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

enum Role {
USER
DEVELOPER
ADMIN
}

@unique

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

備考

全般
  • @unique でアノテーションされたフィールドは、オプションまたは必須にできます。
  • @unique でアノテーションされたフィールドは、@id / @@id のないモデルで唯一の一意性制約を表す場合、必須 でなければなりません。
  • 1つのモデルは任意の数の一意性制約を持つことができます。
  • 任意のスカラーフィールドで定義できます。
  • リレーションフィールドでは定義できません
リレーショナルデータベース
  • 対応するデータベース構成要素: UNIQUE
  • NULL 値は異なるものとみなされます(同じ列に NULL 値を持つ複数の行が許可されます)。
  • 一意性制約を追加すると、指定された列に自動的に対応するユニークインデックスが追加されます。
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 フィールドにユニーク属性を指定する
model User {
email String @unique
name String
}
オプションの String フィールドにユニーク属性を指定する
model User {
id Int @id @default(autoincrement())
email String? @unique
name String
}
リレーションスカラフィールド authorId にユニーク属性を指定する
model Post {
author User @relation(fields: [authorId], references: [id])
authorId Int @unique
title String
published Boolean @default(false)
}

model User {
id Int @id @default(autoincrement())
email String? @unique
name String
Post Post[]
}
デフォルト値として cuid() 値を持つユニーク属性を指定する
model User {
token String @unique @default(cuid())
name String
}

@@unique

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

備考

全般
  • ユニーク制約を構成するすべてのフィールドは、必須フィールドでなければなりません。次のモデルは、idnull になる可能性があるため、無効です。

    model User {
    firstname Int
    lastname Int
    id Int?

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

    この動作の理由は、すべてのコネクタが null 値を異なるものとみなすため、見た目が同一の2つの行がユニークとみなされるためです。

     firstname  | lastname | id
    -----------+----------+------
    John | Smith | null
    John | Smith | null
  • 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 フィールドに複数フィールドのユニーク属性を指定する
model User {
id Int @default(autoincrement())
firstName String
lastName String
isAdmin Boolean @default(false)

@@unique([firstName, lastName])
}

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

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

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

@@unique([authorId, title])
}

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

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

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

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

@@index

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

備考

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

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

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

引数

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

MySQL のみ。バージョン 3.5.0 以降でプレビュー、バージョン 4.0.0 以降で一般提供。
sortいいえStringインデックスまたは制約のエントリがデータベースに格納される順序を指定できます。使用可能なオプションは 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 で追加された GistGinSpGistBrin メソッドを使用したプレビュー版。バージョン 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 属性が必要です。

引数

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

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

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

// or

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

署名

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

SQLite では、署名は次のように変更されます。

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

: バージョン 3.0.0 まで、シグネチャは次のとおりでした

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

参照:@relation 属性

@map

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

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

備考

全般
MongoDB

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

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

引数

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

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

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

署名

@map(_ name: String)

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

生成されたクライアント

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

@@map

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

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

引数

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

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

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

署名

@@map(_ name: String)

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

@@map("users")
}

生成されたクライアント

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

@@map("_Role")
}

@updatedAt

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

備考

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

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

注意

空の更新句を渡すと、@updatedAt 値は変更されません。例:


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

引数

N/A

署名

@updatedAt

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

@ignore

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

備考

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

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

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

@@ignore

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

備考

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

次の例では、Post モデルはユニーク識別子がないため無効です。@@ignore を使用して、生成された Prisma Client API から除外します。

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

@@ignore
}

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

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

@@ignore
}

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

@@schema

warning

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

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

引数

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

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

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

署名

@@schema(_ name: String)

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

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

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

@@schema("auth")
}
情報

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

属性関数

auto()

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

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

備考

MongoDB

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

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

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

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

autoincrement()

warning

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

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

備考

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

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

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

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

sequence()

情報

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

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

オプションの引数

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

連番整数をIDとして生成
model User {
id Int @id @default(sequence(maxValue: 4294967295))
name String
}

cuid()

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

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

注釈

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

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

uuid()

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

注釈

  • 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()値を生成
model User {
id String @id @default(uuid())
name String
}
UUID v7を使用してIDとしてuuid(7)値を生成
model User {
id String @id @default(uuid(7))
name String
}

ulid()

ULID 仕様に基づいて、普遍的に一意で辞書順にソート可能な識別子を生成します。

注釈

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

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

nanoid()

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

情報

Nano IDは、UUID v4(ランダムベース)と非常によく似ています。ID内のランダムビット数(Nano IDでは126、UUIDでは122)が類似しているため、衝突確率も同様です。

10億分の1の確率で重複が発生するためには、103兆個のバージョン4 IDを生成する必要があります。

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

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

注釈

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

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

now()

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

注釈

一般
warning

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

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

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

レコード作成時に現在のタイムスタンプ値を設定
model User {
id String @id
createdAt DateTime @default(now())
}

dbgenerated(...)

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

注釈

リレーショナルデータベース
  • 任意のスカラー型と互換性があります

  • 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""Bobnow()cuid()

enum

warning

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

enumを定義します。

注釈

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

命名規則

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

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

enum Role {
USER
ADMIN
}

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

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

enum Role {
USER
ADMIN
}

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

type

warning

複合型は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
}