Search

관계 데이터 방식

대분류
DB
소분류
Mongo
설명
MongoDB Relationship
유형
상식
주요 레퍼런스
https://inpa.tistory.com/entry/MONGO-%F0%9F%93%9A-%EB%AA%BD%EA%B3%A0%EB%94%94%EB%B9%84%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B4%80%EA%B3%84-%EB%AA%A8%EB%8D%B8%EB%A7%81-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC#document_-_embedded
최종 편집 일시
2024/10/27 15:43
생성 일시
2024/01/17 07:09
13 more properties

MongoDB 관계 데이터 방식

Document - Embedded

2가지 종류의 Document가 있을 때, 1개의 Document 데이터를 Document Key의 value에 통째로 저장하는 방법
// Person { _id: "joe", name: "Joe Bookreader" } // Address { pataron_id: "joe", street: "123 Fake Street", city: "Faketon", state: "MA", zip: "12345" } -> // Person { _id: "joe", name: "Joe Bookreader", address: { // Address street: "123 Fake Street", city: "Faketon", state: "MA", zip: "12345" } }
JSON
복사

Document - Reference

pointer개념과 유사, RDBMS의 외래키와 같은 개념
Embedded 방식의 Document를 통째로 저장하는 것이 아니라 참조 할 수 있도록 ID를 저장하는 방식
// Publisher { _id: "oreilly", // <- Publisher._id name: "O'Reilly Media", founded: 1980, location: "CA" } // Book { _id: 123456789, title: "MongoDB: The Definitive Guide", author: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", publisher_id: "oreilly" // <- Publisher._id }
JSON
복사

MongoDB 관계 유형

One-to-One

단순한 1:1 관계
// 두개의 테이블로 나누어 1:1 관계를 맺는게 아니라, 몽고디비는 그냥 도큐먼트에 키값을 저장해버리면 된다. { "emp_id" : 1001, "emp_name" : "홍길동", "reg_number" : "111111-1111111" }
JSON
복사

One-to-Many

1:N 관계

Embedded 방식

단순한 기법
중복 데이터가 발생해 쓸데없이 Document 크기가 커진다.
/* *** Book 컬렉션 *** */ // Book 1 다큐먼트 { _id: 123456789, title: "MongoDB: The Definitive Guide", author: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", publisher: { // 통째로 그대로 저장되어있다. 중복 발생 name: "O'Reilly Media", founded: 1980, location: "CA" } } // Book 2 다큐먼트 { _id: 234567890, title: "50 Tips and Tricks for MongoDB Developer", author: "Kristina Chodorow", published_date: ISODate("2011-05-06"), pages: 68, language: "English", publisher: { // 통째로 그대로 저장되어있다. 중복 발생 name: "O'Reilly Media", founded: 1980, location: "CA" } }
JSON
복사

Reference 방식

/* *** Book 컬렉션 *** */ // Book 1 다큐먼트 { _id: 123456789, title: "MongoDB: The Definitive Guide", author: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", publisher_id: "oreilly" // <- Publisher._id } // Book 2 다큐먼트 { _id: 234567890, title: "50 Tips and Tricks for MongoDB Developer", author: "Kristina Chodorow", published_date: ISODate("2011-05-06"), pages: 68, language: "English", publisher_id: "oreilly" // <- Publisher._id }
JSON
복사

Many-to-Many

One-to-Many 관계에서 확장된 m:n 관계 유형
/* *** Publisher 컬렉션 *** */ // Publisher 1 다큐먼트 { _id: "oreilly", name: "O'Reilly Media", founded: 1980, location: "CA" } // Publisher 2 다큐먼트 { _id: "devhak", name: "devhak'Reilly Media", founded: 1980, location: "CA" }
JSON
복사
/* *** Book 컬렉션 *** */ // Book 1 다큐먼트 { _id: 123456789, title: "MongoDB: The Definitive Guide", author: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", publisher_id: ["oreilly", "devhak"] // <- Publisher._id 여러개 참조 } // Book 2 다큐먼트 { _id: 234567890, title: "50 Tips and Tricks for MongoDB Developer", author: "Kristina Chodorow", published_date: ISODate("2011-05-06"), pages: 68, language: "English", publisher_id: ["oreilly", "devhak"] // <- Publisher._id 여러개 참조 }
JSON
복사

Embedded vs Reference

상황 별 방식 비교

Embedded

16MB 제한
빈번한 업데이트, 크기가 증가하는 업데이트일 때는 권장x → 단편화
단순함
읽기 속도향상 : 한번의 쿼리로 조회

Refference

복잡함
유연한 데이터 구조
데이터 크기 제한X
상대적으로 강한 일관성 제공 가능