본문 바로가기
Programming & Platform/prisma

prisma onDelete 다양한 옵션 소개, 사용 예시

by 코드스니펫 2023. 12. 14.
반응형

prisma onDelete 다양한 옵션 소개, 사용 예시

 

prisma logo

 

psima를 활용하여 데이터베이스에서 릴레이션을 삭제할 때, Cascade, SetNull, SetDefault, Restrict, 그리고 NoAction과 같은 다양한 옵션을 사용하여 어떤 동작을 취할지 결정하는 것은 상당히 중요한 과제입니다.

 

 

prisma onDelete 다양한 옵션

 

Cascade: 연쇄적 삭제

Cascade 옵션은 참조된 레코드가 삭제될 때, 해당 레코드와 연결된 모든 레코드를 자동으로 삭제하는 옵션입니다. 이는 종속적인 데이터를 간편하게 관리할 수 있도록 해줍니다. 아래는 Prisma에서의 Cascade 사용 예시입니다.

 

 

model Author {
  id     Int      @id @default(autoincrement())
  name   String
  books  Book[]
}

model Book {
  id        Int      @id @default(autoincrement())
  title     String
  author    Author   @relation(onDelete: Cascade)
}

 

 

SetNull: 널 값으로 설정

SetNull 옵션은 참조된 레코드가 삭제될 때, 해당 레코드와 연결된 모든 레코드의 외래 키 필드를 null로 설정하는 옵션입니다. 다만, 필드가 선택적(optional)이어야 합니다. 아래는 SetNull을 활용한 예시입니다.

 

model Comment {
  id       Int      @id @default(autoincrement())
  text     String
  postId   Int?
  post     Post     @relation(fields: [postId], references: [id], onDelete: SetNull)
}

model Post {
  id       Int      @id @default(autoincrement())
  title    String
  comments Comment[]
}

 

 

SetDefault: 기본값으로 설정

SetDefault 옵션은 참조된 레코드가 삭제될 때, 해당 레코드와 연결된 모든 레코드의 외래 키 필드를 기본값으로 설정하는 옵션입니다.

 

 

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

model Post {
  id       Int      @id @default(autoincrement())
  title    String
  userId   Int      @default(auto()) // 기본값 설정
  user     User     @relation(fields: [userId], references: [id], onDelete: SetDefault)
}

 

 

Restrict: 삭제 제한

Restrict 옵션은 참조된 레코드가 삭제되지 않도록 제한하는 옵션입니다. 즉, 참조된 레코드가 삭제되기 전에 참조하는 레코드를 삭제해야 합니다. Prisma에서는 onDelete: Restrict를 지원합니다.

 

model Category {
  id         Int        @id @default(autoincrement())
  name       String
  products   Product[]
}

model Product {
  id         Int        @id @default(autoincrement())
  name       String
  categoryId Int
  category   Category   @relation(fields: [categoryId], references: [id], onDelete: Restrict)
}

 

 

Prisma 소개, Mongoose와 차이, ORM

Prisma 소개, Mongoose와 차이, ORM JavaScript와 TypeScript 개발자들을 위한 Prisma는 뛰어난 ORM 기능으로 객체와 데이터베이스를 손쉽게 연결합니다. 다양한 관계형 데이터베이스를 지원하며, MongoDB까지 포

lemonlog.tistory.com

 

NoAction: 아무런 동작 없음

Prisma에서는 NoAction을 지원하지 않지만, 일부 데이터베이스에서는 사용 가능한 옵션으로, onDelete이나 onUpdate에 대해 아무런 동작을 수행하지 않습니다. Restrict와 유사하지만 데이터베이스에 따라 동작이 다를 수 있습니다.

 

끝으로

 

onDelete 옵션은 데이터베이스 릴레이션 삭제 시의 동작을 세밀하게 제어하는 데 사용됩니다. 프로젝트의 요구사항과 데이터 모델에 따라 적절한 onDelete 옵션을 선택하는 것이 중요합니다. Cascade, SetNull, SetDefault, Restrict, NoAction 등 다양한 옵션을 효과적으로 활용하여 데이터의 무결성과 일관성을 유지하는 것이 좋습니다.

 

▼ 함께 보면 좋은 글 ▼

 

 

Prisma 라이브러리 설치방법

Prisma 라이브러리 설치 방법 손쉽게 시작하는 Prisma 라이브러리 설치하는 방법. 프로젝트를 시작하기 전, 아래 글을 활용하여 Prisma 라이브러리를 손쉽게 설치하고 프로젝트를 구성해봅시다! 🔥 P

lemonlog.tistory.com

 

 

Prisma 소개, Mongoose와 차이, ORM

Prisma 소개, Mongoose와 차이, ORM JavaScript와 TypeScript 개발자들을 위한 Prisma는 뛰어난 ORM 기능으로 객체와 데이터베이스를 손쉽게 연결합니다. 다양한 관계형 데이터베이스를 지원하며, MongoDB까지 포

lemonlog.tistory.com

 

'Programming & Platform > prisma' 카테고리의 다른 글

Prisma 라이브러리 설치방법  (0) 2023.12.06
Prisma 소개, Mongoose와 차이, ORM  (0) 2023.12.04