我在很久以前的一次简短实验后重新访问了RavenDB。目前我正在考虑嵌套3级深度的文档设计,即
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; }
}
首先,这是一个明智的设计吗? UserEvent
通常有少量(少于6个)Show
,但Show
可以有几十到几百ShowEntry
。我在DogId
中添加了ShowEntry
,但稍后我会将其更改为Dog
类型的属性。 Dog
属于特定Breed
,而Breed
属于Group
。故事的Dog
方面必须是另一个问题,但现在我对UserEvent
方感兴趣。
如果以这种方式设计我的文档,我是否可以使用修补API将项目添加到Entries
中的Show
集合中?我想有一个索引,它将根据Dog属性汇总条目。如果修补了文档,是否会处理索引?
答案 0 :(得分:0)
从外部角度看,您的设计看起来确实合情合理。你需要问自己的一个大问题是,“你在大部分时间里查询的计划是什么?”
例如,Show似乎是一个相当普遍的对象,可以从聚合根(来自域驱动设计)中受益。我发现在组织文档时,最重要的问题是“你多长时间计划一次查询对象。”
要回答您的上一个问题,Patching肯定会导致重新编制索引。