2012-03-08 125 views
0

我剛剛在一個簡短的實驗後重新訪問了RavenDB。目前我正在考慮嵌套3層深的文件設計,即RavenDB文檔設計,修補和索引創建

public class UserEvent 
{ 
    public UserEvent() 
    { 
     Shows = new List<Show>(); 
    } 
    public readonly string IdPrefix = "Events/"; 
    public string Id { get; set; } 
    public string Title { get; set; } 
    public List<Show> Shows { get; set; } 
} 

public class Show 
{ 
    public Show() 
    { 
     Entries = new List<ShowEntry>(); 
    } 
    public readonly string IdPrefix = "Shows/"; 
    public string Id { get; set; } 
    public string EventId { get; set; } 
    public string Name { get; set; } 
    public DateTime Date { get; set; } 
    public List<ShowEntry> Entries { get; set; } 
} 

public class ShowEntry 
{ 
    public readonly string IdPrefix = "ShowEntries/"; 
    public string Id { get; set; } 
    public string DogId { get; set; } 
    public string OwnerName { get; set; } 
    public EntryClass Class { get; set; } 
} 

首先,這是一個合理的設計? A UserEvent通常具有幾個(少於6個)Show,但是Show可以具有數十到數百個ShowEntry。我已將DogId包含在ShowEntry中,但可能稍後我會將其更改爲Dog類型的屬性。 A Dog屬於特定的Breed,並且Breed屬於Group。故事的Dog一邊將不得不是另一個問題,但現在我對UserEvent方面感興趣。

如果我的文檔是按照這種方式設計的,我可以使用補丁API將項目添加到Show內的Entries集合中?我想有一個索引來總結基於狗屬性的參賽作品。如果文檔被打補丁,索引會得到處理嗎?

回答

0

從外部角度看,您的設計看起來很明智。你需要問自己的一個大問題是,「你打算如何查詢大部分時間?」

例如,Show似乎是一個相當普遍的對象,它將從作爲聚合根(來自域驅動設計)中受益。我發現,在組織文檔時,最重要的問題是,「你多久計劃一次查詢對象。」

要回答你的最後一個問題,修補應該肯定會導致重新編制索引。