[Node.js 입문]
1 : N, N : M 관계?
호지98
2024. 6. 3. 20:42
1: N (One-to-Many) 관계
1 : N관계는 하나의 엔터티가 여러 엔터티와 연관되어 있을 때 사용된다. 예를 들어, 한 명의 작가가 여러 개의 책을 저술할 수 있는 경우, 작가와 책 사이에 1 : N관계가 있다.
기준
- **주 엔터티(Parent Entity)**가 있고, **자식 엔터티(Child Entity)**가 여러 개 존재할 때.
- 자식 엔터티가 주 엔터티에 종속되어 있을 때.
- 주 엔터티의 한 레코드가 자식 엔터티의 여러 레코드와 연관될 때.
예시
- 한 사용자(User)가 여러 게시물(Post)를 작성할 수 있음.
- 한 블로그 게시물(Post)이 여러 댓글(Comment)을 가질 수 있음.
Prisma Schema 예시
//prisma schema
model User {
id Int @id @default(autoincrement())
name String
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String
userId Int
user User @relation(fields: [userId], references: [id])
}
N: M (Many-to-Many) 관계
N : M 관계는 여러 엔터티가 여러 엔터티와 연관되어 있을 때 사용된다. 예를 들어, 여러 학생이 여러 과목을 수강할 수 있는 경우, 학생과 과목 사이에 N : M관계가 있다.
기준
- 두 엔터티가 서로 독립적이며, 각 엔터티의 여러 레코드가 다른 엔터티의 여러 레코드와 연관될 때.
- 서로 대등한 관계를 맺고 있을 때.
- 중간 테이블을 통해서 관계가 형성될 때.
예시
- 여러 학생(Student)이 여러 과목(Course)을 수강할 수 있음.
- 여러 사용자(User)가 여러 태그(Tag)를 가질 수 있음.
Prisma Schema 예시
model User {
id Int @id @default(autoincrement())
name String
tags Tag[] @relation("UserTags")
}
model Tag {
id Int @id @default(autoincrement())
name String
users User[] @relation("UserTags")
}
model UserTag {
userId Int
tagId Int
user User @relation(fields: [userId], references: [id])
tag Tag @relation(fields: [tagId], references: [id])
@@id([userId, tagId])
}
관계 설정의 기준 요약
- 1 : N관계: 주 엔터티가 자식 엔터티를 여러 개 가질 때.
- 주 엔터티가 하나의 레코드에 여러 자식 레코드를 가짐.
- 자식 엔터티는 하나의 주 엔터티에 속함.
- N : M관계: 두 엔터티가 서로 대등하며, 여러 개의 각 엔터티 레코드가 서로 연관될 때.
- 중간 테이블이 필요.
- 두 엔터티의 여러 레코드가 다른 엔터티의 여러 레코드와 관계를 맺음.
이러한 기준을 통해 데이터베이스 모델링 시 각 엔터티 간의 관계를 올바르게 설정할 수 있다.