한 개의 레코드와 다른 테이블의 다수 레코드를 1:N으로 매칭시킵니다.
사용예(Usecase)
User.post ↔ Post
Post.comments ↔ Commnet
1:1 Relation과 거의 동일합니다. 다음은 User 테이블의 Posts 레코드에 다수의 Post 테이블 레코드를 연결시킨 예제입니다. 단지 다수의 레코드가 연결된 한 개의 레코드가 배열 타입으로 변경됐을 뿐입니다.
schema.prisma
model User {
id Int @default(autoincrement()) @id
posts Post[]
}
model Post {
id Int @default(autoincrement()) @id
user User @relation(fields: [userId], references: [id])
userId Int
}
참조: Prisma2 데이터 모델링1 - 1:1 Relation
인스타그램 클론코딩 백앤드는 대부분 1:N Relation으로 구성되어 있습니다.
한 개의 User 레코드에 다수의 Post 레코드를 연결하고, 한 개의 Post 레코드에 다수의 Comment, File, Like 레코드를 연결했습니다.
위의 Prisma 모델로 부터 생성된 Prisma 클라이언트로 다음과 같이 User, Post, File 레코드를 연결시켜서 CRUD 작업을 할 수 있습니다.
// id가 <id>인 User와 연결된 Post 레코드 생성
const post = await prisma.post.create({
data: {
caption,
location,
user: {
connect: {
id: me.id
}
}
}
});
참고로 User와 Post는 1:N으로 연결되어 있습니다.
참조: [인스타그램 클론코딩] Prisma2 데이터 모델링
위와 같이 Relation으로 연결해 놓으면 다음과 같이 User에서 Post를 검색하거나 Post에서 User를 직관적으로 검색할 수 있습니다.
// userId가 user.id인 모든 Post 레코드 검색
const posts = await prisma.post.fineMany({
where: {
userId: user.id
}
})
// ID가 posts[0].userId인 User 레코드 검색
const user = await prisma.user.findOne({
where: {
id: posts[0].userId
}
})
'백엔드 > Prisma + GraphQL' 카테고리의 다른 글
[인스타그램 클론코딩] Prisma2 데이터 모델링 (0) | 2020.05.27 |
---|---|
Prisma2 데이터 모델링3 - Self Relation (0) | 2020.05.27 |
Prisma2 데이터 모델링1 - 1:1 Relation (0) | 2020.05.27 |
GraphQL with Prisma2 설계 구조 (0) | 2020.05.27 |
Prisma1 vs Prisma2 비교 (0) | 2020.05.27 |