Prisma에서는 모델을 생성할 때 사용되는 입력 유형으로 CreateInput과 UncheckedCreateInput이 있습니다. 이 두 입력 유형은 데이터베이스에 새로운 레코드를 생성할 때 사용되지만, 각각의 목적과 동작 방식이 다릅니다.
CreateInputCreateInput은 관계 데이터 무결성을 보장하기 위해 사용됩니다. 즉, Prisma는 입력 데이터가 올바른지, 외래 키 제약 조건을 만족하는지 등을 검증합니다. 이를 통해 데이터베이스의 무결성을 유지합니다.
// Assuming we have the following model in Prisma schema
model User {
id Int @id @default(autoincrement())
name String
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
userId Int
user User @relation(fields: [userId], references: [id])
}
// CreateInput example
const userCreateInput: Prisma.UserCreateInput = {
name: 'Alice',
posts: {
create: [
{
title: 'First Post',
},
],
},
};
await prisma.user.create({ data: userCreateInput });
위 예제에서 UserCreateInput은 사용자가 작성한 게시물(posts)까지 포함할 수 있으며, Prisma는 관계 데이터의 무결성을 검증합니다.
UncheckedCreateInputUncheckedCreateInput은 Prisma의 데이터 무결성 검사를 우회하고, 개발자가 데이터 무결성에 대해 더 많은 제어를 할 수 있도록 합니다. 이는 주로 개발자가 성능 향상이나 특정 상황에서 데이터베이스 제약 조건을 피하기 위해 사용합니다. UncheckedCreateInput을 사용하면 외래 키 제약 조건이 검증되지 않기 때문에, 잘못된 데이터가 삽입될 위험이 있습니다.
// UncheckedCreateInput example
const userUncheckedCreateInput: Prisma.UserUncheckedCreateInput = {
id: 1, // Manually setting ID, which normally would be handled by Prisma
name: 'Alice',
posts: {
create: [
{
id: 1, // Manually setting ID
title: 'First Post',
userId: 1, // Manually setting userId
},
],
},
};
await prisma.user.create({ data: userUncheckedCreateInput });
위 예제에서 UserUncheckedCreateInput은 id와 userId를 명시적으로 설정하고 있으며, Prisma는 이 값들이 올바른지 여부를 검증하지 않습니다.
무결성 검사:
CreateInput: Prisma는 입력 데이터의 무결성을 검증합니다. 외래 키 제약 조건을 포함한 데이터베이스의 관계 규칙을 준수하도록 보장합니다.UncheckedCreateInput: Prisma는 입력 데이터의 무결성을 검증하지 않습니다. 외래 키 제약 조건을 포함한 데이터베이스의 관계 규칙을 무시할 수 있습니다.사용 사례:
CreateInput: 일반적인 데이터 생성 작업에서 사용됩니다. 데이터 무결성을 유지하면서 새로운 레코드를 생성할 때 적합합니다.UncheckedCreateInput: 성능 최적화가 필요하거나, 데이터 무결성 검사를 우회해야 하는 특정 상황에서 적합합니다.위험성:
CreateInput: 데이터 무결성을 보장하므로, 잘못된 데이터가 삽입될 가능성이 적습니다.UncheckedCreateInput: 데이터 무결성을 보장하지 않으므로, 잘못된 데이터가 삽입될 위험이 있습니다.CreateInput을 사용하는 것이 좋습니다.UncheckedCreateInput을 사용할 수 있지만, 이는 주의해서 사용해야 합니다.