Schema API 레퍼런스
출처 URL: https://docs.prisma.io/docs/orm/reference/prisma-schema-reference
Schema API 레퍼런스
섹션 제목: “Schema API 레퍼런스”Prisma 스키마 언어(PSL) 참조
datasource
섹션 제목: “datasource”Prisma 스키마에서 data source를 정의합니다.
- 필드
datasource 블록은 다음 필드를 허용합니다:
| Name | Required | Type | Description |
|---|---|---|---|
provider | Yes | String (postgresql, mysql, sqlite, sqlserver, mongodb, cockroachdb) | 사용할 데이터베이스 커넥터를 지정합니다. |
relationMode | No | String (foreignKeys, prisma) | 참조 무결성을 외래 키로 강제할지, Prisma로 강제할지 설정합니다. |
schemas | No | Array of strings | 포함할 데이터베이스 스키마 목록입니다(multi-schema 지원, PostgreSQL 및 SQL Server). |
extensions | No | Array of extension names | 활성화할 PostgreSQL extensions입니다. |
연결 URL(url, directUrl, shadowDatabaseUrl)은 스키마 파일이 아니라 prisma.config.ts에서 구성합니다.
다음 provider를 사용할 수 있습니다:
sqlitepostgresqlmysqlsqlservermongodbcockroachdb
-
비고
- 스키마에는
datasource블록을 하나만 둘 수 있습니다. datasource db는 관례일 뿐이며, 데이터 소스 이름은 자유롭게 지정할 수 있습니다. 예:datasource mysql,datasource data.
- 스키마에는
-
예제
- PostgreSQL datasource
datasource db { provider = "postgresql" }prisma.config.ts에서 연결 URL을 구성합니다:
import { defineConfig, env } from "prisma/config";
export default defineConfig({ datasource: { url: env("DATABASE_URL"), }, });PostgreSQL 연결 문자열에 대한 자세한 내용은 여기에서 확인하세요.
- 환경 변수를 통해 PostgreSQL data source 지정
이 예제에서 대상 데이터베이스는 다음 자격 증명으로 접근할 수 있습니다:
- 사용자:
johndoe - 비밀번호:
mypassword - 호스트:
localhost - 포트:
5432 - 데이터베이스 이름:
mydb - 스키마 이름:
public
datasource db { provider = "postgresql" }데이터베이스 연결 URL이 필요한 Prisma CLI 명령(예: prisma generate)을 실행할 때는 DATABASE_URL 환경 변수가 설정되어 있어야 합니다.
한 가지 방법은 아래 내용으로 .env 파일을 만드는 것입니다. Prisma CLI가 자동으로 감지하려면 해당 파일이 schema.prisma 파일과 같은 디렉터리에 있어야 합니다.
DATABASE_URL=postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public- MySQL datasource
datasource db { provider = "mysql" }MySQL connection URLs에 대해 더 알아보세요.
- MongoDB datasource
datasource db { provider = "mongodb" }MongoDB connection URLs에 대해 더 알아보세요.
- SQLite datasource
datasource db { provider = "sqlite" }SQLite connection URLs에 대해 더 알아보세요.
- CockroachDB datasource
datasource db { provider = "cockroachdb" }CockroachDB는 PostgreSQL과 동일한 연결 URL 형식을 사용합니다. PostgreSQL connection URLs에 대해 더 알아보세요.
- Multi-schema datasource (PostgreSQL)
datasource db { provider = "postgresql" schemas = ["public", "analytics"] }generator
섹션 제목: “generator”Prisma 스키마에서 generator를 정의합니다.
prisma-client-jsprovider용 필드
이는 Prisma ORM 6.x 및 이전 버전의 기본 generator입니다. generators에 대해 더 알아보세요.
generator 블록은 다음 필드를 허용합니다:
| Name | Required | Type | Description |
|---|---|---|---|
provider | Yes | prisma-client-js | 사용할 generator를 설명합니다. generator를 구현한 파일을 가리키거나 내장 generator를 직접 지정할 수 있습니다. |
output | No | String (file path) | 생성된 클라이언트의 위치를 결정합니다. 자세히 보기. Default : node_modules/.prisma/client |
previewFeatures | No | List of Enums | 현재 사용 가능한 Preview 기능 목록은 intellisense로 확인하세요(Visual Studio Code에서 Ctrl+Space). Default : none |
engineType | No | Enum (library or binary) | 다운로드하고 사용할 쿼리 엔진 유형을 정의합니다. Default : library |
binaryTargets | No | List of Enums (see below) | 쿼리 엔진 호환성을 보장하기 위해 Prisma Client가 실행될 OS를 지정합니다. Default : native |
moduleFormat | No | Enum (cjs or esm) | 생성된 Prisma Client의 모듈 형식을 정의합니다. 이 필드는 prisma-client generator에서만 사용할 수 있습니다. |
important
커스텀 output 경로를 정의하고, 해당 경로를 .gitignore에 추가한 뒤, 사용자 정의 빌드 스크립트 또는 postinstall 훅을 통해 prisma generate를 실행하는 것을 권장합니다.
prisma-clientprovider용 필드
서로 다른 JavaScript 환경에서 더 큰 제어력과 유연성을 제공하는 ESM 우선 클라이언트 generator입니다. 커스텀 디렉터리에 순수 TypeScript 코드를 생성하므로 생성 코드 전체를 직접 확인할 수 있습니다. 새로운 prisma-client generator에 대해 더 알아보세요.
prisma-client generator는 Prisma ORM 7의 기본 generator입니다.
generator 블록은 다음 필드를 허용합니다:
| Name | Required | Type | Description |
|---|---|---|---|
provider | Yes | prisma-client | 사용할 generator를 설명합니다. generator를 구현한 파일을 가리키거나 내장 generator를 직접 지정할 수 있습니다. |
output | Yes | String (file path) | 생성된 클라이언트의 위치를 결정합니다. 자세히 보기. |
previewFeatures | No | List of Enums | 현재 사용 가능한 Preview 기능 목록은 intellisense로 확인하세요(Visual Studio Code에서 Ctrl+Space). Default : none |
runtime | No | Enum (nodejs, deno, bun, workerd (alias cloudflare), vercel-edge (alias edge-light), react-native) | 대상 런타임 환경입니다. Default : nodejs |
moduleFormat | No | Enum (esm or cjs) | 생성된 코드가 ESM(import 사용) 또는 CommonJS(require(...) 사용) 모듈을 지원할지 결정합니다. 특별한 이유가 없다면 항상 esm을 권장합니다. Default : 환경에서 추론됨. |
generatedFileExtension | No | Enum (ts or mts or cts) | 생성된 TypeScript 파일의 확장자입니다. Default : ts |
importFileExtension | No | Enum (ts,mts,cts,js,mjs,cjs, empty (for bare imports)) | import 문에서 사용할 파일 확장자입니다. Default : 환경에서 추론됨. |
compilerBuild | No | String (fast, small) | 생성된 클라이언트에 사용할 쿼리 컴파일러 빌드를 정의합니다. 기본값인 fast는 쿼리 컴파일이 빠르지만 크기가 증가합니다. small은 크기를 최소화하지만 실행 속도가 약간 느립니다. |
binaryTargets옵션
아래 표에는 binaryTargets에서 지정할 수 있는 플랫폼 이름과 함께 지원되는 모든 운영 체제가 나열되어 있습니다.
별도 명시가 없으면 기본 지원 CPU 아키텍처는 x86_64입니다.
- macOS
| Build OS | Prisma engine build name |
|---|---|
| macOS Intel x86_64 | darwin |
| macOS ARM64 | darwin-arm64 |
- Windows
| Build OS | Prisma engine build name |
|---|---|
| Windows | windows |
- Linux (x86_64 아키텍처의 Alpine)
| Build OS | Prisma engine build name | OpenSSL |
|---|---|---|
| Alpine (3.17 이상) | linux-musl-openssl-3.0.x | 3.0.x |
| Alpine (3.16 이하) | linux-musl | 1.1.x |
- Linux (ARM64 아키텍처의 Alpine)
| Build OS | Prisma engine build name | 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 |
- Linux (Debian), x86_64
| Build OS | Prisma engine build name | 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
| Build OS | Prisma engine build name | 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
| Build OS | Prisma engine build name | 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
| Build OS | Prisma engine build name | 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 (all major distros but 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-jsgenerator 지정하기
generator client { provider = "prisma-client-js" }위의 generator 정의는 output, engineType, binaryTargets(그리고 암묵적인 previewFeatures)의 기본값을 사용하므로 다음과 동등합니다:
generator client { provider = "prisma-client-js" output = "node_modules/.prisma/client" engineType = "library" binaryTargets = ["native"] }- Prisma Client에 대한 사용자 지정
output위치 지정하기
이 예제는 생성된 자산의 사용자 지정 output 위치를 정의하여 기본 위치를 재정의하는 방법을 보여줍니다.
generator client { provider = "prisma-client-js" output = "../src/generated/client" }- OS 호환성을 보장하기 위해 사용자 지정
binaryTargets지정하기
이 예제는 위 표를 기반으로 Prisma Client가 Ubuntu 19.04 (disco)에서 실행되도록 구성하는 방법을 보여줍니다.
generator client { provider = "prisma-client-js" binaryTargets = ["debian-openssl-1.1.x"] }- 사용자 지정 generator 구현을 가리키는
provider지정하기
이 예제는 my-generator라는 디렉터리에 위치한 사용자 지정 generator를 사용하는 방법을 보여줍니다.
generator client { provider = "./my-generator" }model
섹션 제목: “model”Prisma model을 정의합니다.
- 비고
- 모델의 모든 레코드는 고유하게 식별 가능해야 합니다. 모델마다 다음 속성 중 최소 하나를 정의해야 합니다:
@unique@@unique@id@@id
- 모델의 모든 레코드는 고유하게 식별 가능해야 합니다. 모델마다 다음 속성 중 최소 하나를 정의해야 합니다:
- 이름 지정 규칙
- 모델 이름은 다음 정규식을 따라야 합니다:
[A-Za-z][A-Za-z0-9_]* - 모델 이름은 문자로 시작해야 하며 일반적으로 PascalCase로 작성합니다
- 모델 이름은 단수형을 사용해야 합니다(예:
user,users,Users대신User) - Prisma ORM에는 내부적으로 사용하는 여러 예약어가 있으며, 따라서 모델 이름으로 사용할 수 없습니다. 예약어는 여기와 여기에서 확인할 수 있습니다.
- 모델 이름은 다음 정규식을 따라야 합니다:
참고 :
@@mapattribute를 사용하면 모델(예:User)을 모델 이름 지정 규칙과 일치하지 않는 다른 이름의 테이블(예:users)에 매핑할 수 있습니다.
-
필드 순서
- Introspection은 데이터베이스의 해당 열 순서와 동일한 순서로 모델 필드를 나열합니다. 관계 필드는 스칼라 필드 뒤에 나열됩니다.
-
예제
- 두 개의 스칼라 필드를 가진
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 필드
섹션 제목: “model 필드”Fields는 모델의 속성입니다.
- 비고
- 이름 지정 규칙
- 문자로 시작해야 합니다
- 일반적으로 camelCase로 작성합니다
- 다음 정규식을 따라야 합니다:
[A-Za-z][A-Za-z0-9_]*
참고 :
@mapattribute를 사용하면 필드 이름 지정 규칙과 일치하지 않는 다른 이름의 열에 필드 이름을 매핑할 수 있습니다. 예:myField @map("my_field").
model 필드 스칼라 타입
섹션 제목: “model 필드 스칼라 타입”데이터 소스 커넥터는 Prisma ORM 스칼라 타입 각각이 어떤 네이티브 데이터베이스 타입에 매핑되는지를 결정합니다. 마찬가지로 generator는 이러한 타입 각각이 대상 프로그래밍 언어의 어떤 타입에 매핑되는지를 결정합니다.
Prisma 모델에는 모델 간 관계를 정의하는 model field types도 있습니다.
String
가변 길이 텍스트입니다.
- 기본 타입 매핑
| 커넥터 | 기본 매핑 |
|---|---|
| PostgreSQL | text |
| SQL Server | nvarchar(1000) |
| MySQL | varchar(191) |
| MongoDB | String |
| SQLite | TEXT |
| CockroachDB | STRING |
- PostgreSQL
| 네이티브 데이터베이스 타입 | 네이티브 데이터베이스 타입 attribute | 참고 |
|---|---|---|
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
| 네이티브 데이터베이스 타입 | 네이티브 데이터베이스 타입 attribute |
|---|---|
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
| 네이티브 데이터베이스 타입 attribute | 참고 |
|---|---|
@db.String | |
@db.ObjectId | 기본 BSON 타입이 OBJECT_ID인 경우 필수(ID 필드, 관계 스칼라) |
- Microsoft SQL Server
| 네이티브 데이터베이스 타입 | 네이티브 데이터베이스 타입 attribute |
|---|---|
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
| 네이티브 데이터베이스 타입 | 네이티브 데이터베이스 타입 attribute | 참고 |
| -------------------------- | ------------------------------------ | ------------ | --------------- |
| 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
섹션 제목: “Prisma Client JS”string
Boolean
참 또는 거짓 값입니다.
- 기본 타입 매핑
| 커넥터 | 기본 매핑 |
|---|---|
| PostgreSQL | boolean |
| SQL Server | bit |
| MySQL | TINYINT(1) |
| MongoDB | Bool |
| SQLite | INTEGER |
| CockroachDB | BOOL |
- PostgreSQL
| 네이티브 데이터베이스 타입 | 네이티브 데이터베이스 타입 attribute | 참고 |
|---|---|---|
boolean | @db.Boolean |
- MySQL
| 네이티브 데이터베이스 타입 | 네이티브 데이터베이스 타입 attribute | 참고 |
|---|---|---|
TINYINT(1) | @db.TinyInt(1) | TINYINT의 최대 길이가 1보다 크거나(예: TINYINT(2)) 기본값이 1, 0, NULL 이외인 경우 Int에 매핑됩니다 |
BIT(1) | @db.Bit |
- MongoDB
Bool
- Microsoft SQL Server
| 네이티브 데이터베이스 타입 | 네이티브 데이터베이스 타입 attribute | 참고 |
|---|---|---|
bit | @db.Bit |
- SQLite
INTEGER
- CockroachDB
| 네이티브 데이터베이스 타입 | 네이티브 데이터베이스 타입 attribute | 참고 |
|---|---|---|
BOOL | @db.Bool |
- 클라이언트
Prisma Client JS
섹션 제목: “Prisma Client JS”boolean
Int
- 기본 타입 매핑
| 커넥터 | 기본 매핑 |
|---|---|
| PostgreSQL | integer |
| SQL Server | int |
| MySQL | INT |
| MongoDB | Int |
| SQLite | INTEGER |
| CockroachDB | INT |
- PostgreSQL
| 네이티브 데이터베이스 타입 | 네이티브 데이터베이스 타입 attribute | 참고 |
|---|---|---|
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()) |
- Clients
Prisma Client JS
섹션 제목: “Prisma Client JS”number
BigInt
- Default type mappings
| 커넥터 | 기본 매핑 |
|---|---|
| PostgreSQL | bigint |
| SQL Server | int |
| MySQL | BIGINT |
| MongoDB | Long |
| SQLite | INTEGER |
| CockroachDB | INTEGER |
- PostgreSQL
| 기본 데이터베이스 타입 | 기본 데이터베이스 타입 속성 | 참고 |
|---|---|---|
bigint | int8 | @db.BigInt |
bigserial | serial8 | @db.BigInt @default(autoincrement()) |
- MySQL
| 기본 데이터베이스 타입 | 기본 데이터베이스 타입 속성 | 참고 |
|---|---|---|
BIGINT | @db.BigInt | |
SERIAL | @db.UnsignedBigInt @default(autoincrement()) |
- MongoDB
Long
- Microsoft SQL Server
| 기본 데이터베이스 타입 | 기본 데이터베이스 타입 속성 | 참고 |
|---|---|---|
bigint | @db.BigInt |
- SQLite
INTEGER
- CockroachDB
| 기본 데이터베이스 타입 | 기본 데이터베이스 타입 속성 | 참고 |
| ---------------------- | --------------------------- | ------------------------------------ | ---------- | ----------------------------------------------------------------------------------- |
| BIGINT | INT | INT8 | @db.Int8 | PostgreSQL과 다르다는 점에 유의하세요. PostgreSQL에서는 int가 int4의 별칭입니다 |
| bigserial | serial8 | @db.Int8 @default(autoincrement()) |
- Clients
| 클라이언트 | 타입 | 설명 |
|---|---|---|
| Prisma Client JS | BigInt | BigInt 작업 예시 참조 |
Float
부동소수점 숫자.
- Default type mappings
| 커넥터 | 기본 매핑 |
|---|---|
| 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 connector
REAL
- CockroachDB
| 기본 데이터베이스 타입 | 기본 데이터베이스 타입 속성 | 참고 |
| ---------------------- | --------------------------- | ------------ | ------------ |
| DOUBLE PRECISION | FLOAT8 | @db.Float8 |
| REAL | FLOAT4 | FLOAT | @db.Float4 |
- Clients
Prisma Client JS
섹션 제목: “Prisma Client JS”number
Decimal
- Default type mappings
| 커넥터 | 기본 매핑 |
|---|---|
| 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(precision): 저장할 수 있는 10진수 전체 자릿수의 최대값.s(scale): 소수점 오른쪽에 저장되는 10진수 자릿수.
- MySQL
| 기본 데이터베이스 타입 | 기본 데이터베이스 타입 속성 | 참고 |
|---|---|---|
DECIMAL | NUMERIC | @db.Decimal(p, s)† |
- †
p(precision): 저장할 수 있는 10진수 전체 자릿수의 최대값.s(scale): 소수점 오른쪽에 저장되는 10진수 자릿수.
- MongoDB
- Microsoft SQL Server
| 기본 데이터베이스 타입 | 기본 데이터베이스 타입 속성 | 참고 |
|---|---|---|
decimal | numeric | @db.Decimal(p, s)† |
- †
p(precision): 저장할 수 있는 10진수 전체 자릿수의 최대값.s(scale): 소수점 오른쪽에 저장되는 10진수 자릿수.
- SQLite
DECIMAL (2.17.0에서 REAL에서 변경)
- CockroachDB
| 기본 데이터베이스 타입 | 기본 데이터베이스 타입 속성 | 참고 |
| ---------------------- | --------------------------- | ------------------------------------------------------------------ | -------------------- |
| DECIMAL | DEC | NUMERIC | @db.Decimal(p, s)† |
| money | 아직 미지원 | PostgreSQL의 money 타입은 CockroachDB에서 아직 지원되지 않습니다 |
- †
p(precision): 저장할 수 있는 10진수 전체 자릿수의 최대값.s(scale): 소수점 오른쪽에 저장되는 10진수 자릿수.
- Clients
| 클라이언트 | 타입 | 설명 |
|---|---|---|
| Prisma Client JS | Decimal | Decimal 작업 예시 참조 |
DateTime
- Remarks
- Prisma Client는 모든
DateTime을 기본Date객체로 반환합니다. - 현재 Prisma ORM은 MySQL의 zero dates (
0000-00-00 00:00:00,0000-00-00,00:00:00)를 지원하지 않습니다. - 현재
DateTime값을 문자열로 전달할 수 없고, 그렇게 하면 런타임 오류가 발생하는 버그가 있습니다.DateTime값은 문자열('2024-12-04')이 아니라Date객체(예:new Date('2024-12-04'))로 전달해야 합니다.
- Prisma Client는 모든
이 섹션에서 더 많은 정보와 예시를 확인할 수 있습니다: DateTime 작업.
- Default type mappings
| 커넥터 | 기본 매핑 |
|---|---|
| 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) |
Int와 함께 MySQL의 YEAR 타입도 사용할 수 있습니다:
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) |
- Clients
Prisma Client JS
섹션 제목: “Prisma Client JS”Date
Json
JSON 객체입니다.
- 기본 타입 매핑
| 커넥터 | 기본 매핑 |
|---|---|
| PostgreSQL | jsonb |
| SQL Server | 지원되지 않음 |
| MySQL | JSON |
| MongoDB | 유효한 BSON 객체(Relaxed mode) |
| 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
섹션 제목: “Prisma Client JS”object
Bytes
- 기본 타입 매핑
| 커넥터 | 기본 매핑 |
|---|---|
| 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 필드, relation scalar) |
@db.BinData |
- Microsoft SQL Server
| 네이티브 데이터베이스 타입 | 네이티브 데이터베이스 타입 속성 | 참고 |
|---|---|---|
binary | @db.Binary | |
varbinary | @db.VarBinary | |
image | @db.Image |
- SQLite
BLOB
- CockroachDB
| 네이티브 데이터베이스 타입 | 네이티브 데이터베이스 타입 속성 |
| -------------------------- | ------------------------------- | ------ | ----------- |
| BYTES | BYTEA | BLOB | @db.Bytes |
- 클라이언트
| 클라이언트 | 타입 | 설명 |
|---|---|---|
| Prisma Client JS | Uint8Array | Bytes 작업 예시 참고 |
| Prisma Client JS (v6 이전) | Buffer | Bytes 작업 예시 참고 |
Unsupported
MongoDB에서는 지원되지 않음
MongoDB connector는 Unsupported 타입을 지원하지 않습니다.
Unsupported 타입은 2.17.0에서 도입되었으며, Prisma Client가 지원하지 않는 데이터 타입을 Prisma 스키마에서 표현할 수 있게 해줍니다. Unsupported 타입 필드는 prisma db pull로 Introspection 시 생성되거나 수동으로 작성할 수 있으며, Prisma Migrate 또는 db push로 데이터베이스에 생성할 수 있습니다.
- 비고
-
Unsupported타입 필드는 생성된 클라이언트에서 사용할 수 없습니다. -
모델에 필수(required)
Unsupported타입이 포함된 경우, Prisma Client에서prisma.model.create(..),prisma.model.update(...),prisma.model.upsert(...)를 사용할 수 없습니다. -
지원되지 않는 타입이 포함된 데이터베이스를 introspect하면, 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 필드 타입 수정자
섹션 제목: “model 필드 타입 수정자”[] 수정자
섹션 제목: “[] 수정자”필드를 리스트로 만듭니다.
- 비고
- optional일 수 없습니다(예:
Post[]?).
- optional일 수 없습니다(예:
- 관계형 데이터베이스
- 스칼라 리스트(배열)는 데이터베이스가 이를 네이티브로 지원하는 경우에만 데이터 모델에서 지원됩니다. 따라서 현재는 PostgreSQL 또는 CockroachDB를 사용할 때만 스칼라 리스트가 지원됩니다(MySQL과 SQLite는 스칼라 리스트를 네이티브로 지원하지 않음).
- MongoDB
- 스칼라 리스트가 지원됩니다.
- 예시
- 스칼라 리스트 정의
관계형 데이터베이스
MongoDB
model User { id Int @id @default(autoincrement()) favoriteColors String[] }- 기본값이 있는 스칼라 리스트 정의
관계형 데이터베이스
MongoDB
model User { id Int @id @default(autoincrement()) favoriteColors String[] @default(["red", "blue", "green"]) }?수정자
필드를 optional로 만듭니다.
- 비고
- 리스트 필드와 함께 사용할 수 없습니다(예:
Posts[])
- 리스트 필드와 함께 사용할 수 없습니다(예:
- 예시
- optional
name필드
model User { id Int @id @default(autoincrement()) name String? }속성(Attributes)
섹션 제목: “속성(Attributes)”속성은 필드 또는 블록(예: models)의 동작을 수정합니다. 데이터 모델에 속성을 추가하는 방법은 두 가지입니다.
- Field 속성은
@로 시작합니다. - Block 속성은
@@로 시작합니다.
일부 속성은 인자를 받습니다. 속성의 인자는 항상 이름이 지정되지만, 대부분의 경우 인자 이름 은 생략할 수 있습니다.
참고 : 시그니처에서 앞에 오는 밑줄은 인자 이름 을 생략할 수 있음을 의미합니다.
@id
모델에서 단일 필드 ID를 정의합니다.
- 비고
- 일반
- relation 필드에는 정의할 수 없습니다.
- optional일 수 없습니다.
- 관계형 데이터베이스
- MongoDB
-
해당 데이터베이스 구성 요소: 배열을 제외한 모든 유효한 BSON 타입
-
모든 모델은
@id필드를 정의해야 합니다. -
기본 ID 필드 이름은 항상
_id이며,@map("_id")로 매핑해야 합니다. -
데이터베이스에서
ObjectId를 사용하려는 경우를 제외하면 모든 스칼라 필드(String,Int,enum)에 정의할 수 있습니다. -
ID로
ObjectId를 사용하려면 다음이 필요합니다.-
String또는Bytes필드 타입 사용 -
필드에
@db.ObjectId주석 추가:
-
-
id String @db.ObjectId @map("_id")* 선택적으로, `ObjectId`를 자동 생성하는 [the `auto()` function](https://docs.prisma.io/docs/orm/reference/prisma-schema-reference#auto)을 사용하는 [`@default`](https://docs.prisma.io/docs/orm/reference/prisma-schema-reference#default) 속성을 필드에 추가id String @db.ObjectId @map("_id") @default(auto())-
cuid(),uuid(),ulid()는 지원되지만 유효한ObjectId를 생성하지 않습니다.@id에는 대신auto()를 사용하세요. -
autoincrement()는 지원되지 않음
- 인자
| 이름 | 필수 | 타입 | 설명 |
|---|---|---|---|
map | 아니요 | String | 데이터베이스의 기본 기본 키 제약 조건 이름입니다. |
MySQL 또는 MongoDB에서는 지원되지 않습니다.
length| 아니요| number| 인덱싱할 값의 하위 부분(subpart)에 대한 최대 길이를 지정할 수 있습니다.
MySQL 전용.
sort| 아니요| String| 데이터베이스에 ID 항목을 어떤 순서로 저장할지 지정할 수 있습니다. 사용 가능한 옵션은 Asc 및 Desc입니다.
SQL Server 전용.
clustered| 아니요| Boolean| ID를 clustered 또는 non-clustered로 정의합니다. 기본값은 true입니다.
SQL Server 전용.
- 시그니처
@id(map: String?, length: number?, sort: String?, clustered: Boolean?)- 예시
대부분의 경우 데이터베이스가 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 }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 }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 }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") name String }위 경우에는 Prisma Client를 사용해 User 모델의 새 레코드를 생성할 때 반드시 직접 ID 값을 제공해야 합니다. 예:
const newUser = await prisma.user.create({ data: { id: 1, name: "Alice", }, });- 기본값 없이 relation scalar 필드에 ID 지정하기
다음 예시에서 authorId는 relation scalar이면서 동시에 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? }이 시나리오에서는 Profile만 단독으로 생성할 수 없습니다. Prisma Client의 nested writes를 사용해 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 connector는 복합 ID를 지원하지 않습니다.
모델에 다중 필드 ID(복합 ID)를 정의합니다.
- 비고
- 인수
| Name | Required | Type | Description |
|---|---|---|---|
fields | Yes | FieldReference[] | 필드 이름 목록 - 예: ["firstname", "lastname"] |
name | No | String | 모든 필드를 포괄하는 인수에 대해 Prisma Client가 노출할 이름입니다. 예: fullName: { firstName: "First", lastName: "Last"}에서 fullName |
map | No | String | 데이터베이스의 기본 기본 키 제약 조건 이름입니다. |
MySQL에서는 지원되지 않습니다.
length| No| number| 인덱싱할 값의 하위 부분(subpart)에 대한 최대 길이를 지정할 수 있습니다.
MySQL 전용.
sort| No| String| 데이터베이스에 ID 항목을 어떤 순서로 저장할지 지정할 수 있습니다. 사용 가능한 옵션은 Asc 및 Desc입니다.
SQL Server 전용.
clustered| No| Boolean| ID가 clustered인지 non-clustered인지 정의합니다. 기본값은 true입니다.
SQL Server 전용.
@@id 속성의 fields 인수 이름은 생략할 수 있습니다:
@@id(fields: [title, author]) @@id([title, author])- 시그니처
@@id(_ fields: FieldReference[], name: String?, map: String?)- 예시
- 두 개의
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", }, }, });- 두 개의
String필드와 하나의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, }, });- relation 필드를 포함하는 다중 필드 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 스키마에서 아직 표현할 수 없는 기본값은 introspection을 사용할 때
dbgenerated()함수로 표현됩니다. - Prisma 스키마에서는 relation 필드에 기본값을 허용하지 않습니다. 다만 relation을 뒷받침하는 필드(
@relation속성의fields인수에 나열된 필드)에는 기본값을 정의할 수 있습니다. relation을 뒷받침하는 필드의 기본값은 해당 relation이 자동으로 채워진다는 의미입니다. - 기본값은 이를 네이티브로 지원하는 데이터베이스에서 scalar lists와 함께 사용할 수 있습니다.
- Prisma 스키마에서 아직 표현할 수 없는 기본값은 introspection을 사용할 때
- 관계형 데이터베이스
- 대응되는 데이터베이스 구성 요소:
DEFAULT - 기본값은 정적 값(
4,"hello")이거나 다음 함수 중 하나일 수 있습니다:autoincrement()sequence()(CockroachDB 전용)dbgenerated(...)cuid()cuid(2)uuid()uuid(4)uuid(7)ulid()nanoid()now()
- Prisma 스키마에서 아직 표현할 수 없는 기본값은 introspection을 사용할 때
dbgenerated(...)함수로 표현됩니다. - Prisma 스키마에서는 relation 필드에 기본값을 허용하지 않습니다. 다만 relation을 뒷받침하는 필드(
@relation속성의fields인수에 나열된 필드)에는 기본값을 정의할 수 있습니다. relation을 뒷받침하는 필드의 기본값은 해당 relation이 자동으로 채워진다는 의미입니다. - 기본값은 이를 네이티브로 지원하는 데이터베이스에서 scalar lists와 함께 사용할 수 있습니다.
- JSON 데이터. JSON은
@default속성 안에서 반드시 큰따옴표로 감싸야 합니다. 예:@default("[]"). JSON 객체를 제공하려면 큰따옴표로 감싼 다음 내부 큰따옴표를 백슬래시로 이스케이프해야 합니다. 예:@default("{ \"hello\": \"world\" }").
- 대응되는 데이터베이스 구성 요소:
- MongoDB
- 인수
| Name | Required | Type | Description |
|---|---|---|---|
value | Yes | 표현식 (예: 5, true, now()) | |
map | No | String | SQL Server 전용. |
@default 속성의 value 인수 이름은 생략할 수 있습니다:
id Int @id @default(value: autoincrement()) id Int @id @default(autoincrement())- 시그니처
@default(_ value: Expression, map: String?)- 예시
Int의 기본값
관계형 데이터베이스
MongoDB
model User { email String @unique profileViews Int @default(0) }Float의 기본값
관계형 데이터베이스
MongoDB
model User { email String @unique 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) }String의 기본값
관계형 데이터베이스
MongoDB
model User { email String @unique name String @default("") }Boolean의 기본값
관계형 데이터베이스
MongoDB
model User { email String @unique isAdmin Boolean @default(false) }DateTime의 기본값
DateTime의 정적 기본값은 ISO 8601 표준을 기반으로 한다는 점에 유의하세요.
관계형 데이터베이스
MongoDB
model User { email String @unique data DateTime @default("2020-03-19T14:21:00+02:00") }Bytes의 기본값
관계형 데이터베이스
MongoDB
model User { email String @unique secret Bytes @default("SGVsbG8gd29ybGQ=") }enum의 기본값](https://docs.prisma.io/docs/orm/reference/prisma-schema-reference#default-value-for-an-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? }MongoDB
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 }@unique
이 필드에 대한 고유 제약 조건을 정의합니다.
- 비고
- 일반
@unique가 주석 처리된 필드는 optional 또는 required일 수 있습니다.@unique가 주석 처리된 필드가@id/@@id가 없는 모델에서 유일한 고유 제약 조건을 나타내는 경우, 해당 필드는 반드시 required여야 합니다.- 모델에는 원하는 수만큼 고유 제약 조건을 가질 수 있습니다.
- 모든 스칼라 필드에 정의할 수 있습니다.
- 관계 필드에는 정의할 수 없습니다.
- 관계형 데이터베이스
- 해당 데이터베이스 구성 요소:
UNIQUE NULL값은 서로 다른 값으로 간주됩니다(동일한 컬럼에서NULL값을 가진 여러 행이 허용됨).- 고유 제약 조건을 추가하면 지정한 컬럼에 해당하는 고유 인덱스가 자동으로 추가됩니다.
- 해당 데이터베이스 구성 요소:
- MongoDB
- MongoDB의 고유 인덱스로 강제됩니다.
- 인수
| Name | Required | Type | Description |
|---|---|---|---|
map | No | String | |
length | No | number | 인덱싱할 값의 하위 부분에 대한 최대 길이를 지정할 수 있습니다. |
MySQL 전용.
sort| No| String| 제약 조건 항목이 데이터베이스에 어떤 순서로 저장될지 지정할 수 있습니다. 사용 가능한 옵션은 Asc 및 Desc입니다.
clustered| No| Boolean| 제약 조건이 clustered인지 non-clustered인지 정의합니다. 기본값은 false입니다.
SQL Server 전용.
where| No| function or object| 지정된 조건과 일치하는 행만 포함하는 부분 인덱스를 정의합니다. raw("SQL expression") 또는 { field: value } 같은 객체 리터럴을 허용합니다.
PostgreSQL, SQLite, SQL Server, CockroachDB에서 지원됩니다. partialIndexes Preview 기능이 필요합니다.
- ¹ 일부 인덱스 및 필드 유형에서는 필수일 수 있습니다.
- 시그니처
@unique(map: String?, length: number?, sort: String?, clustered: Boolean?, where: raw(String) | { field: value }?)참고 :
where인수는 raw SQL 조건식을 위한raw("SQL expression")또는 타입 안전 조건을 위한{ field: value }객체 리터럴을 허용합니다. 자세한 내용은 부분 인덱스 구성을 참조하세요.
참고 :
partialIndexesPreview 기능 이전에는 시그니처가 다음과 같았습니다:
> @unique(map: String?, length: number?, sort: String?, clustered: Boolean?)- 예시
- required
String필드에 고유 속성 지정
관계형 데이터베이스
MongoDB
model User { email String @unique name String }- optional
String필드에 고유 속성 지정
관계형 데이터베이스
MongoDB
model User { id Int @id @default(autoincrement()) 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[] }cuid()값을 기본값으로 사용하는 고유 속성 지정
관계형 데이터베이스
MongoDB
model User { token String @unique @default(cuid()) name String }@@unique
지정된 필드에 대한 복합 고유 제약 조건을 정의합니다.
- 비고
- 일반
- 고유 제약 조건을 구성하는 모든 필드는 반드시 mandatory 필드여야 합니다. 다음 모델은
id가null일 수 있으므로 유효하지 않습니다:
- 고유 제약 조건을 구성하는 모든 필드는 반드시 mandatory 필드여야 합니다. 다음 모델은
model User { firstname Int lastname Int id Int?
@@unique([firstname, lastname, id]) }이 동작의 이유는 모든 커넥터가 null 값을 서로 다른 값으로 간주하기 때문이며, 그 결과 겉보기에는 동일한 두 행도 고유한 것으로 간주됩니다:
firstname | lastname | id -----------+----------+------ John | Smith | null John | Smith | null- 모델에는 원하는 수만큼
@@unique블록을 가질 수 있습니다.
- 관계형 데이터베이스
- 해당 데이터베이스 구성 요소:
UNIQUE @id/@@id가 없는 모델에서@@unique블록이 유일한 고유 제약 조건을 나타내는 경우@@unique블록이 필요합니다.- 고유 제약 조건을 추가하면 지정한 컬럼에 해당하는 고유 인덱스가 자동으로 추가됩니다.
- 해당 데이터베이스 구성 요소:
- MongoDB
- MongoDB의 복합 인덱스로 강제됩니다.
@@unique블록은 모델의 유일한 고유 식별자로 사용할 수 없습니다. MongoDB는@id필드를 요구합니다.
- 인수
| Name | Required | Type | Description |
|---|---|---|---|
fields | Yes | FieldReference[] | 필드 이름 목록입니다. 예: ["firstname", "lastname"]. 필드는 mandatory여야 합니다. 비고를 참조하세요. |
name | No | String | 필드 조합의 고유 이름입니다. 기본값은 fieldName1_fieldName2_fieldName3입니다. |
map | No | String | |
length | No | number | 인덱싱할 값의 하위 부분에 대한 최대 길이를 지정할 수 있습니다. |
MySQL 전용.
sort| No| String| 제약 조건 항목이 데이터베이스에 어떤 순서로 저장될지 지정할 수 있습니다. 사용 가능한 옵션은 Asc 및 Desc입니다.
clustered| No| Boolean| 제약 조건이 clustered인지 non-clustered인지 정의합니다. 기본값은 false입니다.
SQL Server 전용.
where| No| function or object| 지정된 조건과 일치하는 행만 포함하는 부분 인덱스를 정의합니다. raw("SQL expression") 또는 { field: value } 같은 객체 리터럴을 허용합니다.
PostgreSQL, SQLite, SQL Server, CockroachDB에서 지원됩니다. partialIndexes Preview 기능이 필요합니다.
@@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?, where: raw(String) | { field: value }?)참고 :
where인수는 raw SQL 조건식을 위한raw("SQL expression")또는 타입 안전 조건을 위한{ field: value }객체 리터럴을 허용합니다. 자세한 내용은 부분 인덱스 구성을 참조하세요.
참고 :
partialIndexesPreview 기능 이전(그리고extendedIndexesPreview 기능이 있는 버전 4.0.0 / 3.5.0 이전)에는 시그니처가 다음과 같았습니다:
> @@unique(_ fields: FieldReference[], name: String?, map: String?)- 예시
- 두 개의
String필드에 다중 필드 고유 속성 지정
관계형 데이터베이스
MongoDB
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, }, }, });- 두 개의
String필드와 하나의Boolean필드에 다중 필드 고유 속성 지정
관계형 데이터베이스
MongoDB
model User { id Int @default(autoincrement()) 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[] }- 다중 필드 고유 속성에 사용자 지정
name지정
관계형 데이터베이스
MongoDB
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);) CONCURRENTLY를 사용해 인덱스를 동시 생성
- 인덱스 필드를 식으로 정의(예:
- PostgreSQL 및 CockroachDB:
- 해당 데이터베이스 구성 요소:
Prisma 스키마에서 이러한 옵션을 구성할 수는 없지만, 데이터베이스 레벨에서 직접 구성할 수 있습니다.
- MongoDB
- 인수
| Name | Required | Type | Description |
|---|---|---|---|
fields | Yes | FieldReference[] | 필드 이름 목록입니다. 예: ["firstname", "lastname"] |
name | No | String | Prisma Client가 모든 필드를 포함하는 인수에 노출할 이름입니다. 예: fullName: { firstName: "First", lastName: "Last"}에서 fullName |
map | No | map | 기본 데이터베이스에서의 인덱스 이름입니다(이름을 지정하지 않으면 Prisma가 식별자 길이 제한을 준수하는 인덱스 이름을 생성합니다. Prisma는 다음 네이밍 규칙을 사용합니다: tablename.field1_field2_field3_unique) |
length | No | number | 인덱싱할 값의 하위 부분에 대한 최대 길이를 지정할 수 있습니다. |
MySQL 전용.
sort| 아니요| String| 데이터베이스에서 인덱스 또는 제약 조건의 항목이 어떤 순서로 저장될지 지정할 수 있습니다. 사용 가능한 옵션은 asc 및 desc입니다.
clustered| 아니요| Boolean| 인덱스가 클러스터형인지 비클러스터형인지 정의합니다. 기본값은 false입니다.
SQL Server 전용.
type| 아니요| identifier| 인덱스 액세스 메서드를 지정할 수 있습니다. 기본값은 BTree입니다.
PostgreSQL 및 CockroachDB 전용.
ops| 아니요| identifier 또는 function| 특정 인덱스 유형에 대한 인덱스 연산자를 정의할 수 있습니다.
PostgreSQL 전용.
where| 아니요| function 또는 object| 지정된 조건과 일치하는 행만 포함하는 부분 인덱스를 정의합니다. raw("SQL expression") 또는 { field: value } 같은 객체 리터럴을 허용합니다.
PostgreSQL, SQLite, SQL Server, CockroachDB에서 사용 가능합니다. partialIndexes Preview 기능이 필요합니다.
@@index 속성의 fields 인수에서 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?, where: raw(String) | { field: value }?)참고 :
where인수는 raw SQL 조건식을 위한raw("SQL expression")또는 타입 안전 조건을 위한{ field: value }객체 리터럴을 받습니다. 자세한 내용은 부분 인덱스 구성을 참고하세요.
참고 :
partialIndexesPreview 기능에서where인수를 사용할 수 있습니다. 이 Preview 기능 이전의 시그니처는 다음과 같았습니다:
> @@index(_ fields: FieldReference[], map: String?)- 예시
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[] | annotated relation field에서 필수 | 현재 모델의 필드 목록 | ["authorId"], ["authorFirstName, authorLastName"] |
references | FieldReference[] | annotated relation field에서 필수 | 관계의 반대편 모델 의 필드 목록 | ["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?)- 예시
@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") }생성된 클라이언트:
await prisma.user.create({ data: { firstName: "Yewande", // first_name */} firstName }, });ADMIN이라는 enum을 데이터베이스 enumadmin에 매핑
enum Role { ADMIN @map("admin") CUSTOMER }Prisma ORM v7 이상에서는 생성된 TypeScript enum이 매핑된 값을 사용합니다:
export const Role = { ADMIN: "admin", CUSTOMER: "CUSTOMER", } as const;이는 Role.ADMIN이 "ADMIN"이 아니라 "admin"으로 평가된다는 의미입니다.
@@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") }생성된 클라이언트:
await prisma.user.create({ // users */} user data: { name: "Yewande", }, });Roleenum을 데이터베이스의_Role이라는 네이티브 enum에 매핑하고 값을 데이터베이스에서 소문자 값으로 매핑
enum Role { ADMIN @map("admin") CUSTOMER @map("customer")
@@map("_Role") }@updatedAt
레코드가 마지막으로 업데이트된 시간을 자동으로 저장합니다. 시간을 직접 제공하지 않으면 Prisma Client가 이 속성이 있는 필드의 값을 자동으로 설정합니다.
- 비고
DateTime필드와 호환됨- Prisma ORM 레벨에서 구현됨
4.4.0 이전 버전에서는 now()도 함께 사용하는 경우, 데이터베이스와 앱의 시간대가 다르면 시간이 @updatedAt 값과 다를 수 있습니다. 이는 @updatedAt은 Prisma ORM 레벨에서 동작하는 반면 now()는 데이터베이스 레벨에서 동작하기 때문입니다.
빈 업데이트 절을 전달하면 @updatedAt 값은 변경되지 않습니다. 예:
await prisma.user.update({ where: { id: 1, }, data: {}, //<- Empty update clause });- 인수
해당 없음
- 시그니처
@updatedAt- 예시
관계형 데이터베이스
MongoDB
model Post { id String @id updatedAt DateTime @updatedAt }@ignore
Prisma Client에서 제외하려는 필드(예: Prisma Client 사용자가 업데이트하지 못하게 하려는 필드)에 @ignore를 추가합니다. 무시된 필드는 생성된 Prisma Client에서 제외됩니다. @default가 없는 필수 필드에 이렇게 적용하면 모델의 create 메서드는 비활성화됩니다(해당 데이터 없이는 데이터베이스가 항목을 생성할 수 없기 때문).
- 비고
- Prisma ORM은 introspect 시 잘못된 모델을 참조하는 필드에
@ignore를 자동으로 추가합니다.
- Prisma ORM은 introspect 시 잘못된 모델을 참조하는 필드에
- 예시
다음 예시는 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에서 제외됩니다.
- 비고
- Prisma ORM은 introspection 중 잘못된 모델에
@@ignore를 추가합니다. (또한 해당 모델을 가리키는 relation에@ignore도 추가합니다)
- Prisma ORM은 introspection 중 잘못된 모델에
- 예시
다음 예시에서 Post 모델은 고유 식별자가 없기 때문에 유효하지 않습니다. 생성된 Prisma Client API에서 이를 제외하려면 @@ignore를 사용하세요.
schema.prisma
/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client. model Post { id Int @default(autoincrement()) // no unique identifier author User @relation(fields: [authorId], references: [id]) authorId Int
@@ignore }다음 예시에서 Post 모델은 고유 식별자가 없어서 유효하지 않으며, User의 posts relation 필드도 유효하지 않은 Post 모델을 참조하므로 유효하지 않습니다. 생성된 Prisma Client API에서 모델과 relation 필드를 모두 제외하려면 Post 모델에는 @@ignore를, User의 posts relation 필드에는 @ignore를 사용하세요.
schema.prisma
/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client. model Post { id Int @default(autoincrement()) // no unique identifier author User @relation(fields: [authorId], references: [id]) authorId Int
@@ignore }
model User { id Int @id @default(autoincrement()) name String? posts Post[] @ignore }@@schema
모델에 연결된 테이블이 데이터베이스의 어떤 스키마에 포함될지 지정하려면 모델에 @@schema를 추가합니다. 여기에서 여러 스키마 추가에 대해 더 알아보세요.
여러 데이터베이스 스키마 지원은 PostgreSQL, CockroachDB, SQL Server 커넥터에서만 사용할 수 있습니다.
- 인수
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
name | String | Yes | 데이터베이스 스키마 이름. | "base", "auth" |
@@schema 속성의 name 인수 이름은 생략할 수 있습니다
@@schema(name: "auth") @@schema("auth")- 시그니처
@@schema(_ name: String)- 예시
User모델을auth라는 데이터베이스 스키마에 매핑
generator client { provider = "prisma-client" output = "./generated" }
datasource db { provider = "postgresql" schemas = ["auth"] }
model User { id Int @id @default(autoincrement()) name String
@@schema("auth") }multiSchema 기능 사용에 대한 자세한 내용은 이 가이드를 참고하세요.
@shardKey
이 기능을 사용하려면 generator에 shardKeys Preview feature flag가 필요합니다:
generator client { provider = "prisma-client" output = "../generated/prisma" previewFeatures = ["shardKeys"] }@shardKey 속성은 PlanetScale 데이터베이스에서만 호환됩니다. 이를 통해 모델의 필드에 shard key를 정의할 수 있습니다:
model User { id String @default(uuid()) region String @shardKey }@@shardKey
이 기능을 사용하려면 generator에 shardKeys Preview feature flag가 필요합니다:
generator client { provider = "prisma-client" output = "../generated/prisma" previewFeatures = ["shardKeys"] }@@shardKey 속성은 PlanetScale 데이터베이스에서만 호환됩니다. 이를 통해 모델의 여러 필드에 shard key를 정의할 수 있습니다:
model User { id String @default(uuid()) country String customerId String @@shardKey([country, customerId]) }속성 함수
섹션 제목: “속성 함수”auto()
이 함수는 MongoDB에서만 사용할 수 있습니다.
데이터베이스에서 자동으로 생성되는 기본값을 나타냅니다.
- 비고
- MongoDB
@id 필드에 대한 ObjectId를 생성하는 데 사용됩니다:
id String @map("_id") @db.ObjectId @default(auto())- 관계형 데이터베이스
auto() 함수는 관계형 데이터베이스에서 사용할 수 없습니다.
- 예시
ObjectId생성(MongoDB 전용)
model User { id String @id @default(auto()) @map("_id") @db.ObjectId name String? }autoincrement()
MongoDB에서는 지원되지 않음
MongoDB connector는 autoincrement() 함수를 지원하지 않습니다.
기반 데이터베이스에 정수 시퀀스를 만들고, 해당 시퀀스를 기준으로 생성된 레코드의 ID 값에 증가된 값을 할당합니다.
- 비고
-
대부분의 데이터베이스에서
Int와 호환됨(CockroachDB에서는BigInt) -
데이터베이스 레벨에서 구현되므로 데이터베이스 스키마에 반영되며 introspection을 통해 인식할 수 있습니다. 데이터베이스 구현은 다음과 같습니다:
-
| Database | Implementation |
|---|---|
| PostgreSQL | SERIAL 타입 |
| MySQL | AUTO_INCREMENT 속성 |
| SQLite | AUTOINCREMENT 키워드 |
| CockroachDB | SERIAL 타입 |
- 예시
- 자동 증가 정수를 ID로 생성(관계형 데이터베이스 전용)
model User { id Int @id @default(autoincrement()) name String }sequence()
CockroachDB에서만 지원됨 sequence 함수는 CockroachDB connector에서만 지원됩니다.
기반 데이터베이스에 정수 시퀀스를 만들고, 해당 시퀀스를 기준으로 생성된 레코드의 값에 증가된 값을 할당합니다.
- 선택 인수
| Argument | Example |
|---|---|
virtual | @default(sequence(virtual)) |
Virtual sequence는 단조 증가 값을 생성하지 않고, 내장 함수 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에서 구현되므로 기반 데이터베이스 스키마에는 “표시”되지 않습니다. introspection 사용 시에도 Prisma schema를 수동으로 변경하고 Prisma Client를 생성하면
cuid()를 사용할 수 있으며, 이 경우 값은 Prisma ORM에서 생성됩니다. 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()를 계속 사용할 수 있습니다.
- 예시
cuid()값을 ID로 생성
관계형 데이터베이스
MongoDB
model User { id String @id @default(cuid()) name String }cuid2사양 기반의cuid(2)값을 ID로 생성
관계형 데이터베이스
MongoDB
model User { id String @id @default(cuid(2)) name String }uuid()
UUID 사양을 기반으로 전역 고유 식별자를 생성합니다. Prisma ORM은 버전 4(기본값)와 7을 지원합니다.
- 비고
String과 호환됩니다.- Prisma ORM에서 구현되므로 기반 데이터베이스 스키마에는 “표시”되지 않습니다. introspection 사용 시에도 Prisma schema를 수동으로 변경하고 Prisma Client를 생성하면
uuid()를 사용할 수 있으며, 이 경우 값은 Prisma ORM에서 생성됩니다. - 관계형 데이터베이스의 경우: Prisma ORM의
uuid()함수를 사용하지 않으려면dbgenerated와 함께 데이터베이스 네이티브 함수를 사용할 수 있습니다.
- MongoDB의 경우:
uuid()는 유효한ObjectId를 생성하지 않습니다. 기본 데이터베이스에서ObjectId를 사용하려면@db.ObjectIdsyntax를 사용할 수 있습니다. 다만_id필드 타입이ObjectId가 아니라면uuid()를 계속 사용할 수 있습니다.
- Examples
- Generate
uuid()values as IDs using UUID v4
관계형 데이터베이스
MongoDB
model User { id String @id @default(uuid()) name String }- Generate
uuid(7)values as IDs using UUID v7
관계형 데이터베이스
MongoDB
model User { id String @id @default(uuid(7)) name String }ulid()
ULID 사양을 기반으로, 사전식 정렬이 가능한 범용 고유 식별자를 생성합니다.
- Remarks
ulid()는 128비트 랜덤 식별자를 생성하며, 26자 길이의 영숫자 문자열로 표현됩니다. 예:01ARZ3NDEKTSV4RRFFQ69G5FAV
- Examples
- Generate
ulid()values as IDs
관계형 데이터베이스
MongoDB
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로 만들려면, version 4 ID를 103조 개 생성해야 합니다.
Nano ID와 UUID v4의 주요 차이점은 두 가지입니다.
- Nano ID는 더 큰 알파벳을 사용하므로, 비슷한 랜덤 비트 수를 36개가 아닌 21개 심볼에 담습니다.
- Nano ID 코드는 uuid/v4 패키지보다 4배 작습니다: 423바이트 대신 130바이트입니다.
- Remarks
String과 호환됩니다.- Prisma ORM에 의해 구현되므로 기본 데이터베이스 스키마에는 “보이지” 않습니다. introspection 사용 시에도 Prisma schema를 수동으로 변경하고 Prisma Client를 생성하면
uuid()를 계속 사용할 수 있으며, 이 경우 값은 Prisma ORM이 생성합니다. - MongoDB의 경우:
nanoid()는 유효한ObjectId를 생성하지 않습니다. 기본 데이터베이스에서ObjectId를 사용하려면@db.ObjectIdsyntax를 사용할 수 있습니다. 다만_id필드 타입이ObjectId가 아니라면nanoid()를 계속 사용할 수 있습니다.
- Examples
- Generate
nanoid()values with 21 characters as IDs
관계형 데이터베이스
MongoDB
model User { id String @id @default(nanoid()) name String }- Generate
nanoid()values with 16 characters as IDs
관계형 데이터베이스
MongoDB
model User { id String @id @default(nanoid(16)) name String }now()
레코드가 생성되는 시점의 타임스탬프를 설정합니다.
- Remarks
- General
DateTime과 호환됩니다.
4.4.0 이전 버전에서는 @updatedAt도 함께 사용하면, 데이터베이스와 앱의 타임존이 다를 때 now() 값과 시간이 달라질 수 있습니다. 이는 @updatedAt는 Prisma ORM 레벨에서 동작하고, now()는 데이터베이스 레벨에서 동작하기 때문입니다.
- Relational databases
- 데이터베이스 레벨에서 구현되므로 데이터베이스 스키마에 반영되며 introspection으로 인식할 수 있습니다. 데이터베이스별 구현:
| Database | Implementation |
|---|---|
| PostgreSQL | CURRENT_TIMESTAMP 및 now() 같은 별칭 |
| MySQL | CURRENT_TIMESTAMP 및 now() 같은 별칭 |
| SQLite | CURRENT_TIMESTAMP 및 date('now') 같은 별칭 |
| CockroachDB | CURRENT_TIMESTAMP 및 now() 같은 별칭 |
- MongoDB
- Prisma ORM 레벨에서 구현됩니다.
- Examples
- Set current timestamp value when a record is created
관계형 데이터베이스
MongoDB
model User { id String @id createdAt DateTime @default(now()) }dbgenerated(...)
Prisma schema에서 표현할 수 없는 기본값(random() 등)을 나타냅니다.
- Remarks
- Relational databases
-
모든 스칼라 타입과 호환됩니다.
-
빈 문자열
dbgenerated("")은 사용할 수 없습니다. -
String값을 받으며, 이를 통해 다음을 수행할 수 있습니다:Unsupported타입의 기본값 설정- 지원되는 타입의 기본값 동작 재정의
-
dbgenerated(...)의 문자열 값은 DB가 기본값으로 반환하는 값과 일치하지 않을 수 있습니다. 문자열 같은 값이 명시적으로 캐스팅될 수 있기 때문입니다(예:'hello'::STRING). 불일치가 있으면 Prisma Migrate는 여전히 마이그레이션이 필요하다고 표시합니다. 차이를 해결하려면prisma db pull을 사용해 올바른 값을 추론할 수 있습니다. (Related issue)
-
- Examples
- Set default value for
Unsupportedtype
circle Unsupported("circle")? @default(dbgenerated("'<(10,4),11>'::circle"))- Override default value behavior for supported types
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() is a PostgreSQL function. PostgreSQL 12.13 이하 버전에서 이를 사용하려면 pgcrypto extension을 활성화해야 합니다. extension 설치 방법은 PostgreSQL extensions를 참고하세요.
속성 인수 타입
섹션 제목: “속성 인수 타입”FieldReference[]
섹션 제목: “FieldReference[]”field 이름의 배열: [id], [firstName, lastName]
String
큰따옴표로 감싼 가변 길이 텍스트: "", "Hello World", "Alice"
Expression
Prisma ORM이 평가할 수 있는 표현식: 42.0, "", Bob, now(), cuid()
enum
섹션 제목: “enum”Microsoft SQL Server에서는 지원되지 않음
Microsoft SQL Server connector는 enum 타입을 지원하지 않습니다.
enum을 정의합니다.
-
Remarks
- enum은 PostgreSQL과 MySQL에서 네이티브로 지원됩니다.
- SQLite와 MongoDB에서는 Prisma ORM 레벨에서 enum이 구현되고 강제됩니다.
-
Naming conventions
- enum 이름은 문자로 시작해야 합니다(보통 PascalCase로 표기).
- enum은 단수형을 사용해야 합니다(예:
role,roles,Roles대신Role). - 다음 정규식을 준수해야 합니다:
[A-Za-z][A-Za-z0-9_]*
-
Examples
- Specify an
enumwith two possible values
관계형 데이터베이스
MongoDB
enum Role { USER ADMIN }
model User { id Int @id @default(autoincrement()) role Role }- Specify an
enumwith two possible values and set a default value
관계형 데이터베이스
MongoDB
enum Role { USER ADMIN }
model User { id Int @id @default(autoincrement()) role Role @default(USER) }type
섹션 제목: “type”복합 타입은 MongoDB에서만 사용할 수 있습니다.
composite type을 정의합니다.
- Naming conventions
Type 이름은 다음 조건을 충족해야 합니다:
- 문자로 시작해야 합니다(보통 PascalCase로 표기).
- 다음 정규식을 준수해야 합니다:
[A-Za-z][A-Za-z0-9_]*
- Examples
- Define a
Productmodel with a list ofPhotocomposite types
model Product { id String @id @default(auto()) @map("_id") @db.ObjectId name String photos Photo[] }
type Photo { height Int width Int url String }