더북(TheBook)

모든 조상 보여주기

한 자식 문서에 있는 부모 대신 모든 조상을 보여줄 수도 있다. 예를 들어 연필 카테고리의 모든 조상을 표현한 문서는 다음과 같다.


{productCategoryID: 'PC233', name:'Pencils',
      ancestors:['PC72', 'PC37', 'P01']}

이 패턴은 계층 관계에서 임의의 지점을 기준으로 거꾸로 루트까지의 전체 경로를 알아야 할 때 유용하게 사용할 수 있다.

이 패턴은 단 한 번의 읽기 작업으로 루트까지 가는 전체 경로를 가져올 수 있다는 것이 장점이다. 부모나 자식만 참조하면 계층 관계의 여러 레벨에 걸쳐 참조해야 하므로 읽기 작업을 여러 번 수행해야 한다.

이 패턴의 단점은 계층 관계가 변하면 쓰기 작업을 많이 수행해야 한다는 것이다. 계층 관계에서 변경 사항이 발생한 노드 레벨이 높을수록 더 많은 문서를 수정해야 한다. 예를 들어 제품 카테고리와 사무용품 사이에 새 레벨이 추가된다면 새로 추가된 항목 아래에 있는 모든 문서를 수정해야 할 것이다. 계층 관계에서 제일 하단에 새로운 레벨을 추가했다면, 예를 들어 연필 밑에 샤프연필과 일반연필을 추가했다면 변경할 문서는 없다.

Note 일대다, 다대다, 계층 관계는 문서 데이터베이스에서 흔히 사용하는 패턴이다. 여기서 설명한 패턴들은 많은 상황에서 유용하게 사용할 수 있지만, 실행하려는 질의 종류를 참조하는 패턴의 유용성과 예상되는 문서의 변경 사항을 항상 검토하는 습관을 들여야 한다. 사용하려는 질의를 지원하고 좀 더 작업을 빠르게 처리하면서 문서를 관리하고 다른 패턴보다 덜 복잡한 설계 패턴을 사용하는 것이 좋다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.