2010-06-20 9 views
4

저는 문서 데이터베이스, 특히 RavenDb를 조사해 왔으며 모든 예제는 명확하고 이해할 수 있습니다. 주어진 구조체에 몇 개의 레벨이 있는지 미리 모르는 경우를 찾을 수 없습니다. 예를 들어 당신은 어떻게 가계도는 다음 클래스를 주어 계속 것 :문서 데이터베이스에서 패밀리 트리와 같은 구조를 모델링하는 방법

public class Person{ 
    public string Name {get;set;} 

    public Person Parent {get;set;} 
    public Person[] Children {get;set;} 
} 

대부분의 예에서 우리가 문서로 집계 루트를 검색 할 보았다. 여기에 집계 루트와 경계가 무엇인지는 분명하지 않습니다. 더 많은 정보를 원하시면, 특히 하단에

public class Person { 
    public string Name { get; set; } 
    public string ParentId { get; set; } 
    public string[] ChildrenIds { get; set; } 
} 

확인 페이지 : 내가 RavenDb에 대한 생각

+0

룬, 가능한 경우 답변에 대답을 표시하십시오. – Peter

답변

2

, 당신은 객체의 ID를 유지해야 할 것 http://ravendb.net/documentation/docs-document-design

+0

맞아, 이것은 또한 내 첫 성향이었다. 그러나 이것은 또한 어떤 의미에서 문서 데이터베이스의 기본 아이디어에 위배되는 것이라고 말합니다. 이런 방식으로 모델링 된 데이터를 쿼리하는 것은 더 많은 집계 된 문서에 비해 실제로 느릴 수 있습니다. 내가 찾고있는 것은 덜 분명한 "전략"입니다. –

+0

RavenDb Google 그룹 (http://groups.google.com/group/ravendb/browse_thread/thread/8a75de45916a8593)에 게시했습니다. 나는 곧 당신이 대답을 얻어야한다고 생각합니다. – Peter

+0

나는 그것이 "aggregate root"라고 생각하는 것에 부분적으로 달려 있다고 생각한다. 예를 들어 특정 인물과 모든 자손을 일정 수준, 즉 3 세대까지 끌어 내리는 공통된 작업이 있습니까? 그렇다면 문서로 저장할 수 있습니다. RavenDB의 일반적인 원칙은 쓰기가 비싸지 만 읽기는 저렴하다는 것입니다. 따라서 문서는 자신 만의 것이어야합니다. –

3

Ayende 그냥 올렸습니다 이것에 대답하는 blog post.

+0

그냥 RSS 피드에서 보았습니다. 데이터를 비정규 화하는 해결책은 UI에서 어디서나 필요한 것을 정확하게 알아야합니다. 그러나 제가 사용하는 대부분의 시나리오를 생각해보십시오. –

+0

좋은 지적이지만, 그 부분을 이해하는 것이 RavenBD v RDMS의 주요 차이점이라고 생각합니다. 또한 색인을 사용하여 문서 상단에 앉아 다른 "보기"를 가져올 수 있습니다. –

+1

업데이트를 쉽게하기 위해 집합 기반 작업 (http://groups.google.com/group/ravendb/browse_thread/thread/d898694f321586ea 참조)을 사용하여 색인을 사용하여 문서를 가져 오지 않고 직접 업데이트 할 수 있습니다 서버에서 수정하고 다시 게시 할 수 있습니다. 또한 문서를 패치 할 수 있습니다 (http://www.ravendb.net/documentation/docs-http-api-patch 참조). –

관련 문제