[Prisma] schema.prisma 파일에서 model 작성하기

김까치·2023년 5월 21일
2

Prisma는 데이터베이스 스키마를 정의하고 관리하기 위한 도구입니다. schema.prisma 파일은 Prisma에서 사용되는 스키마 정의 파일입니다. 이 파일에서는 데이터베이스 테이블과 필드, 관계 등을 정의합니다. 아래는 Prisma schema 파일에서 model을 작성하는 방법에 대한 설명입니다.

1. 모델 선언

Prisma 스키마 파일에서 각 데이터베이스 테이블은 모델로 선언됩니다. 모델은 model 키워드를 사용하여 정의됩니다. 모델 이름은 일반적으로 단수형으로 작성되며, 첫 글자는 대문자로 시작하는 것이 관례입니다.

예시:

model User {
  // 모델 필드 정의
}

2. 필드 정의

모델 내에서 각 필드는 해당 필드의 이름과 데이터 유형을 지정하여 정의됩니다. 필드 이름은 소문자로 작성되며, 필드 유형은 Prisma가 지원하는 데이터 유형 중 하나로 지정됩니다. 필드 유형은 데이터베이스에 따라 다를 수 있으므로 사용 중인 데이터베이스에 맞는 유형을 선택해야 합니다.

예시:

model User {
  id       Int      @id @default(autoincrement())
  username String   @unique
  email    String   @unique
  age      Int?
  createdAt DateTime @default(now())
}

Prisma schema에서 사용할 수 있는 일부 기본 데이터 유형은 다음과 같습니다:

  1. String: 문자열 값을 저장하는 데이터 유형입니다. 예를 들어, 사용자의 이름, 이메일 주소 등을 저장하는 데 사용할 수 있습니다.

  2. Int: 정수 값을 저장하는 데이터 유형입니다. 예를 들어, 사용자의 나이, 주문의 수량 등을 저장하는 데 사용할 수 있습니다.

  3. Float: 부동 소수점 값을 저장하는 데이터 유형입니다. 예를 들어, 상품의 가격, 사용자의 평점 등을 저장하는 데 사용할 수 있습니다.

  4. Boolean: 참 또는 거짓 값을 저장하는 데이터 유형입니다. 예를 들어, 사용자의 로그인 상태, 게시물의 게시 여부 등을 저장하는 데 사용할 수 있습니다.

  5. DateTime: 날짜와 시간 값을 저장하는 데이터 유형입니다. 예를 들어, 사용자의 가입일, 게시물의 작성일 등을 저장하는 데 사용할 수 있습니다.

  6. Enum: 사전에 정의된 값 중 하나를 저장하는 데이터 유형입니다. 예를 들어, 사용자의 역할(관리자, 일반 사용자 등)을 저장하는 데 사용할 수 있습니다.

  7. Json: JSON 형식의 데이터를 저장하는 데이터 유형입니다. 예를 들어, 복잡한 데이터 구조를 가진 사용자 프로필 정보 등을 저장하는 데 사용할 수 있습니다.


3. 필드 속성

필드 선언에는 추가적인 속성을 정의할 수 있습니다. 예를 들어, @id 속성은 해당 필드를 기본 키로 지정하고, @unique 속성은 해당 필드에 고유한 값이어야 함을 나타냅니다. Prisma는 다양한 속성을 제공하므로 필요에 따라 사용할 수 있습니다.

예시:

model User {
  id       Int      @id @default(autoincrement())
  username String   @unique
  email    String   @unique
  age      Int?
  createdAt DateTime @default(now())
}

다음은 Prisma의 주요 필드 속성 종류입니다:

  1. @id: 주요 식별자(primary key)로 사용될 필드를 정의합니다. 주요 식별자는 해당 테이블의 고유한 레코드를 식별하는 데 사용됩니다. 대개 숫자 자동 증가(auto-increment) 필드와 관련됩니다.

  2. @unique: 필드의 값이 고유해야 함을 지정합니다. 중복된 값이 입력되지 않도록 제약 조건을 추가합니다.

  3. @default(value): 필드의 기본값을 지정합니다. 해당 필드가 값이 입력되지 않았을 때 기본값이 사용됩니다. 예를 들어, @default(now())는 현재 날짜와 시간을 필드의 기본값으로 설정합니다.

  4. @updatedAt: 필드가 업데이트될 때마다 자동으로 현재 시간으로 갱신됩니다. 대개 데이터의 최근 업데이트 시점을 추적하는 데 사용됩니다.

  5. @relation(fields: [fields], references: [fields]): 필드 간의 관계를 정의합니다. 해당 필드가 다른 모델의 필드를 참조하고 있는 관계를 설정할 수 있습니다. fields 속성은 현재 모델의 필드를, references 속성은 참조하는 모델의 필드를 지정합니다.

  6. @map(name: "custom_name"): 필드를 데이터베이스 테이블의 특정 열 이름과 매핑합니다. 기본적으로 Prisma는 필드 이름을 데이터베이스 열 이름으로 사용하지만, 필요에 따라 사용자 정의 이름을 설정할 수 있습니다.

  7. @ignore: 해당 필드를 Prisma에서 무시하고 데이터베이스와의 상호 작용에서 제외합니다. 주로 데이터베이스에 저장되지 않는 가상 필드나 보조 필드 등에 사용됩니다.


4. 관계 정의:

Prisma를 사용하여 관계형 데이터베이스의 관계를 정의할 수 있습니다. 예를 들어, User 모델이 Post 모델과 일대다 관계를 가진다고 가정해봅시다. 이 경우 관계를 정의하기 위해 @relation 속성과 @relation 속성 내에 fieldsreferences를 사용합니다.

예시:
Sure! 이어서 예시를 보여드리겠습니다:

model User {
  id       Int     @id @default(autoincrement())
  username String  @unique
  email    String  @unique
  age      Int?
  posts    Post[]  // User와 Post 모델 간의 일대다 관계
}

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  published Boolean  @default(false)
  author    User?    @relation(fields: [authorId], references: [id])  // User와 Post 모델 간의 관계 정의
  authorId  Int?     // User와 Post 모델 간의 관계 정의
}

위의 예시에서 User와 Post 간의 관계는 User 모델과 Post 모델 사이의 일대다 관계입니다. User 모델에서 posts 필드는 Post 모델의 배열을 가리키는 필드로, User는 여러 개의 Post를 가질 수 있습니다.

Post 모델에서는 author 필드가 User 모델을 가리키는 관계를 정의합니다. @relation 속성을 사용하여 관계를 정의하고, fields 속성은 현재 모델의 필드를 지정하고, references 속성은 관계가 지정되는 모델의 필드를 지정합니다. 이렇게 함으로써 User 모델의 id 필드와 Post 모델의 authorId 필드 사이에 관계를 형성합니다.

이렇게 Prisma를 사용하여 관계형 데이터베이스의 관계를 정의할 수 있습니다. 위의 예시는 User와 Post 사이의 일대다 관계를 보여주지만, 다른 유형의 관계도 동일한 방식으로 정의할 수 있습니다.

profile
개발자 연습생

0개의 댓글