Prisma 계층 구조 / self relation

agnusdei·2023년 8월 2일
0
post-custom-banner

물론입니다! 폴더 구조와 같이 계층 구조를 나타내는 예시를 살펴보겠습니다. 이 예시에서는 간단한 디렉토리 및 서브디렉토리 구조를 Prisma 모델을 사용하여 표현해보겠습니다.

가정: 파일 시스템에서 폴더와 서브폴더 간의 계층 구조를 나타내는 데이터베이스 모델을 만든다고 가정해봅시다.

Prisma 모델을 사용하여 폴더 계층 구조를 나타내는 코드 예시:

model Folder {
  id       Int       @id @default(autoincrement())
  name     String
  parentId Int?
  parent   Folder?   @relation("ParentChild", fields: [parentId], references: [id])
  children Folder[]  @relation("ParentChild")
}

위의 코드에서:

  • Folder 모델은 각 폴더를 나타냅니다.
  • 각 폴더는 고유한 id를 가지며, 폴더의 이름은 name 필드에 저장됩니다.
  • parentId는 상위 폴더의 id를 참조하는 외래 키입니다.
  • parent 필드는 상위 폴더와의 관계를 나타내며, @relation 데코레이터를 사용하여 ParentChild라는 관계 이름을 지정합니다. fields 속성은 현재 모델의 parentId 필드와 연결되고, references 속성은 대상 모델의 id 필드와 연결됩니다.
  • children 필드는 하위 폴더들과의 관계를 나타냅니다. 역시 @relation 데코레이터를 사용하고, 관계 이름은 ParentChild입니다.

이제 이 모델을 통해 어떤 상황에서 계층 구조가 유용한지 알아보겠습니다.

예를 들어, 파일 시스템에서 각 폴더는 하위 폴더들을 가질 수 있으며, 여러 계층으로 이루어진 디렉토리 구조를 관리해야 하는 경우를 상상해보세요. 위의 Prisma 모델을 사용하면 각 폴더와 그 하위 폴더들 간의 계층 구조를 표현하고, 특정 폴더의 모든 하위 폴더를 쉽게 탐색할 수 있게 됩니다.

또한, 무한대 계층 구조를 다루려면 위와 같은 방식으로 계속 확장하면 됩니다. 즉, 하위 폴더들도 마찬가지로 parentchildren 관계를 가지도록 정의하면 됩니다. 이를 통해 무한대의 계층 구조를 표현하고 관리할 수 있습니다.

물론입니다! 폴더 계층 구조를 다루는 Prisma 모델을 통해 조회, 입력, 수정과 같은 다양한 예시를 살펴보겠습니다.

  1. 폴더 생성하기:
// 루트 폴더 생성
const rootFolder = await prisma.folder.create({
  data: {
    name: "Root Folder"
  }
});

// 루트 폴더의 하위 폴더 생성
const subfolder1 = await prisma.folder.create({
  data: {
    name: "Subfolder 1",
    parentId: rootFolder.id
  }
});

const subfolder2 = await prisma.folder.create({
  data: {
    name: "Subfolder 2",
    parentId: rootFolder.id
  }
});
  1. 폴더 계층 조회하기:
// 루트 폴더와 하위 폴더들 조회
const rootWithSubfolders = await prisma.folder.findUnique({
  where: { id: rootFolder.id },
  include: { children: true }
});

console.log("루트 폴더:", rootWithSubfolders);
  1. 하위 폴더 생성하기:
// 하위 폴더의 하위 폴더 생성
const subfolder1_1 = await prisma.folder.create({
  data: {
    name: "Subfolder 1-1",
    parentId: subfolder1.id
  }
});
  1. 폴더 정보 수정하기:
// 폴더 이름 변경
const updatedFolder = await prisma.folder.update({
  where: { id: subfolder1.id },
  data: { name: "Updated Subfolder 1" }
});

위의 예시에서는 폴더 구조를 다루기 위해 Prisma 모델을 사용하고 다양한 작업을 수행하는 방법을 보여주었습니다.

  • 폴더를 생성할 때, parentId를 지정하여 해당 폴더의 상위 폴더를 지정할 수 있습니다.
  • 폴더 계층을 조회할 때, include를 사용하여 하위 폴더들도 함께 조회할 수 있습니다.
  • 하위 폴더를 생성할 때, parentId를 통해 해당 폴더의 상위 폴더를 지정할 수 있습니다.
  • 폴더 정보를 수정할 때, update를 사용하여 해당 폴더의 정보를 업데이트할 수 있습니다.

이렇게 Prisma 모델을 사용하면 복잡한 폴더 계층 구조를 효과적으로 관리하고, 계층 간의 다양한 작업을 수행할 수 있습니다.

post-custom-banner

0개의 댓글