MongoDB는 관계(일대일, 일대다, 다대다)를 embedding 또는 referencing으로 모델링합니다 — 선택은 관계의 카디널리티, 데이터 접근 방식, 공유 여부에 달려 있습니다. SQL의 획일적인 외래 키 방식과 달리 MongoDB는 관계마다 유연성을 제공합니다.
일대일
{ : (), : , : { : , : } }
MongoDB는 관계(일대일, 일대다, 다대다)를 embedding 또는 referencing으로 모델링합니다 — 선택은 관계의 카디널리티, 데이터 접근 방식, 공유 여부에 달려 있습니다. SQL의 획일적인 외래 키 방식과 달리 MongoDB는 관계마다 유연성을 제공합니다.
{ : (), : , : { : , : } }
// 일대소(ONE-TO-FEW) → embed (제한적, 함께 접근됨)
{ _id: ObjectId("..."), name: "Ann", addresses: [ {...}, {...} ] } // 몇 개의 주소
// 일대다(ONE-TO-MANY) → reference ("다" 쪽이 "일"을 참조)
// authors collection: { _id: "a1", name: "Ann" }
// books collection: { _id: "b1", authorId: "a1", title: "..." } // 각 book이 author를 참조
// 일대초다수(ONE-TO-SQUILLIONS, 거대/무한) → 항상 reference (무한 데이터를 embed하지 말 것)
// 예: 수백만 개의 로그 항목을 가진 user → 별도 collection, userId로 reference
핵심 미묘함: 일대소(embed), 일대다(다 쪽에서 reference), 일대초다수(항상 reference — 16MB document 제한과 성능 때문에 무한 데이터를 절대 embed하지 않음).
// id 배열로 reference (한쪽 또는 양쪽에)
{ _id: "s1", name: "Student", courseIds: ["c1", "c2"] } // student → courses
{ _id: "c1", name: "Course", studentIds: ["s1", "s2"] } // course → students (선택)
// → 쿼리와 $lookup으로 해소; 또는 별도 "enrollments" collection (junction 유사)
다대다는 참조된 id의 배열(한쪽 또는 양쪽)을 사용하거나, 풍부한 관계 데이터를 위해 별도의 junction 유사 collection을 사용합니다.
// 필요할 때 참조된 데이터 조인
db.books.aggregate([
{ $lookup: { from: "authors", localField: "authorId", foreignField: "_id", as: "author" } }
]);
관계 모델링은 데이터베이스 설계에 근본적이고, MongoDB의 유연하고 접근 패턴 주도의 방식이 SQL의 획일적인 외래 키와 다르므로, MongoDB에서 관계를 모델링하는 방법을 이해하는 것은 효과적인 schema 설계에 필수적입니다.
핵심 통찰은 MongoDB가 관계의 특성에 따라 embedding 또는 referencing으로 관계를 모델링한다는 것이며 — 카디널리티가 선택에 어떻게 영향을 미치는지 이해하는 것이 결정적인 기술입니다: 일대일(보통 embed — 함께 접근됨), 중요한 미묘함을 가진 일대다(일대소 → 제한적이고 함께 접근되는 데이터는 embed; 일대다 → 다 쪽에서 reference; 일대초다수 → 항상 reference, 16MB document 제한과 성능 때문에 무한 데이터를 절대 embed하지 않음), 그리고 다대다(참조된 id의 배열, 또는 junction 유사 collection).
이 카디널리티 주도 의사결정(특히 데이터가 너무 크거나 무한하여 embed할 수 없는 때를 인식)은 무한 배열을 embedding(document 비대화, 제한 도달)하거나 embed해야 할 데이터를 과도하게 reference하는 흔한 실수를 피하는 데 필수적입니다.
조인이 필요할 때 $lookup으로 참조를 해소하는 방법을 이해하는 것이 그림을 완성합니다.
엔티티 간 관계가 대부분의 데이터 모델에 내재되어 있고, MongoDB의 관계별 유연한 방식(카디널리티와 접근 패턴에 따른 embed vs reference)이 SQL의 획일적인 외래 키와 근본적으로 다르고 더 미묘하므로, MongoDB에서 관계를 모델링하는 방법 — 카디널리티 기반 embed/reference 결정(특히 일대소/다/초다수 구분)과 참조 해소 — 을 이해하는 것은 효과적인 MongoDB schema 설계에 필수적이고 자주 적용되는 지식이며, embed/reference 기초 위에 모든 실제 애플리케이션이 가진 관계를 처리하고 건전한 MongoDB 모델링을 순진한 관계형 이식과 구별 짓는 핵심 영역입니다.