prisma onDelete 다양한 옵션 소개, 사용 예시
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)
}
NoAction: 아무런 동작 없음
Prisma에서는 NoAction을 지원하지 않지만, 일부 데이터베이스에서는 사용 가능한 옵션으로, onDelete이나 onUpdate에 대해 아무런 동작을 수행하지 않습니다. Restrict와 유사하지만 데이터베이스에 따라 동작이 다를 수 있습니다.
끝으로
onDelete 옵션은 데이터베이스 릴레이션 삭제 시의 동작을 세밀하게 제어하는 데 사용됩니다. 프로젝트의 요구사항과 데이터 모델에 따라 적절한 onDelete 옵션을 선택하는 것이 중요합니다. Cascade, SetNull, SetDefault, Restrict, NoAction 등 다양한 옵션을 효과적으로 활용하여 데이터의 무결성과 일관성을 유지하는 것이 좋습니다.
▼ 함께 보면 좋은 글 ▼
'Programming & Platform > prisma' 카테고리의 다른 글
Prisma 라이브러리 설치방법 (0) | 2023.12.06 |
---|---|
Prisma 소개, Mongoose와 차이, ORM (0) | 2023.12.04 |