framework/Prisma

✅ Prisma 1:N 관계 완전 가이드 – One-to-Many 관계 정석 모델링

octo54 2025. 6. 9. 10:23
반응형

 

✅ Prisma 1:N 관계 완전 가이드 – One-to-Many 관계 정석 모델링

"하나의 User가 여러 개의 Post를 가질 수 있다."
이런 구조를 Prisma에서 어떻게 안전하고 효율적으로 정의할 수 있을까요?


🔎 1:N 관계란?

  • 한 개의 레코드가 여러 개의 레코드와 연결되는 관계
  • 대표 예:
    • User 1명 ↔ Post 여러 개
    • Category 1개 ↔ Product 여러 개

🧱 기본 예제

model User {
  id    Int     @id @default(autoincrement())
  name  String
  posts Post[]
}

model Post {
  id       Int    @id @default(autoincrement())
  title    String
  authorId Int
  author   User   @relation(fields: [authorId], references: [id])
}

핵심 요소 ✅

필드 설명

User.posts 배열로 다수의 Post 참조
Post.authorId 외래 키 필드
Post.author @relation()으로 관계 정의

⚖️ 관계 방향 이해

방향 설명

User → Post posts: Post[]로 다수 참조
Post → User authorId, author로 외래키 참조

🧪 Prisma Client 사용 예시

반응형
// User → Post
const userWithPosts = await prisma.user.findUnique({
  where: { id: 1 },
  include: { posts: true },
})

// Post → User
const postWithAuthor = await prisma.post.findUnique({
  where: { id: 10 },
  include: { author: true },
})

✨ 관계 이름 명시 (선택적)

같은 모델 간 여러 관계가 있을 경우, @relation(name: "...")을 명시합니다.

model User {
  id          Int     @id @default(autoincrement())
  createdPosts Post[] @relation("CreatedPosts")
  likedPosts   Post[] @relation("LikedPosts")
}

model Post {
  id          Int     @id @default(autoincrement())
  creatorId   Int
  likerId     Int
  creator     User    @relation("CreatedPosts", fields: [creatorId], references: [id])
  liker       User    @relation("LikedPosts", fields: [likerId], references: [id])
}

✅ @relation("관계이름")으로 중복 방지 및 관계 명확화


🧠 실전 모델 예시 – 블로그 시스템

model Category {
  id       Int       @id @default(autoincrement())
  name     String
  posts    Post[]
}

model Post {
  id          Int     @id @default(autoincrement())
  title       String
  categoryId  Int
  category    Category @relation(fields: [categoryId], references: [id])
}
  • 카테고리 1개가 포스트 여러 개를 가짐
  • Post 모델에서 외래 키 categoryId 설정

⚠️ 자주 하는 실수

실수 증상

@relation() 빠짐 Prisma CLI 에러 발생
배열 쪽에 @relation 작성 반대편(외래 키가 있는 곳)에서만 설정해야 함
외래 키 필드 누락 관계 정의 실패
잘못된 references 값 존재하지 않는 필드를 참조하게 됨

🔄 Prisma 마이그레이션 흐름

  1. 모델에 1:N 구조 정의
  2. prisma migrate dev 또는 prisma db push 실행
  3. DB에 테이블과 외래 키 생성
  4. Prisma Client로 안전하게 조회 및 연결 가능

🏁 요약

항목 내용

관계 구조 A (배열) → B (단일 필드 + 외래키)
외래 키 정의 @relation(fields: [...], references: [...])
Client 접근 include, select로 양방향 탐색
관계 이름 필요한 경우 명시적 @relation("...") 사용

 

Prisma 1대다 관계,Prisma One-to-Many 모델링,Prisma 관계 설정,Prisma 외래키 예제,Prisma post user 관계,Prisma 관계형 데이터베이스,Prisma 배열 관계,타입 안전 ORM,Prisma client join,Prisma relation 설명