RavenDB文档设计,修补和索引创建

时间:2012-03-08 21:27:00

标签: ravendb

我在很久以前的一次简短实验后重新访问了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属性汇总条目。如果修补了文档,是否会处理索引?

1 个答案:

答案 0 :(得分:0)

从外部角度看,您的设计看起来确实合情合理。你需要问自己的一个大问题是,“你在大部分时间里查询的计划是什么?”

例如,Show似乎是一个相当普遍的对象,可以从聚合根(来自域驱动设计)中受益。我发现在组织文档时,最重要的问题是“你多长时间计划一次查询对象。”

要回答您的上一个问题,Patching肯定会导致重新编制索引。