(MongoDB) Model RelationShip Between Documents
<1:1 관계 with Embedded Documents>
MongoDB는 flexible schema를 가진다.
<Pattern>
예) 후원자와 주소관의 관계
{
_id : "joe",
name : "Joe Bookreader"
}
{
patron_id : "joe",
street : " 123 Fake Street",
city : "Faketon",
state : "MA",
zip : "12345"
}
만약 주소 데이터가 name정보에 의해 자주 참조된다면, 애플리케이션은 여러번의 쿼리를 날리게 된다.
그러므로 더 나은 데이터 모델은 patron 데이터 안에 address 데이터를 embed하는 것이다.
{
_id : "joe",
name : "Joe Bookreader',
address : {
street : " 123 Fake Street",
city : "Faketon",
state : "MA",
zip : "12345"
}
}
위는 1번의 쿼리로 불러오게 된다.
<1 대 다 관계 with Embedded Documents>
<Pattern>
다음 예는 후원자와 여러 주소들간의 관계를 나타낸 것이다.
다음 예는 참조에 의한 embedding의 이점을 보여준다.
만약 애플리케이션이 name 정보에 의해 주소를 빈번히 호출한다면, 애플리케이션은 multiple queries 를 날려야 한다.
그러므로 최적의 스키마는 embed한 다음과 같이 한다.
위와 같이 하면 1번의 쿼리만 날리게 된다.
< 1 대 다 관계 with Document References>
<Pattern>
예 ) 퍼블리셔와 책의 관계이다.
다음에는 반복되는 퍼블리셔 정보 호출을 피하게 해주기 위해 퍼블리셔 정보를 책 collection 과 seperate시킨다.
만약 퍼블리셔 당 책들의 숫자가 작거나 제한된 숫자인 경우라면, 퍼블리셔 도큐멘트에 책 레퍼러느를 넣는 것은 유용한 방법이다.
그렇지 않고 만약 퍼블리셔당 책들의 넘버가 unbounded되면 , 이 데이터 모델은 변할 수 있게 된다. 배열은 커지게 된다.
mutable을 피하기 위해서는, 배열의 증가를 피하기 위해서는 퍼블리셔 도큐먼트를 책 도큐멘트에 참조하게 한다.
댓글
댓글 쓰기