2012-03-08 100 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似乎是一个相当普遍的对象,它将从作为聚合根(来自域驱动设计)中受益。我发现,在组织文档时,最重要的问题是,“你多久计划一次查询对象。”

要回答你的最后一个问题,修补应该肯定会导致重新编制索引。