【问题标题】:RavenDB document design, patching, and index creationRavenDB 文档设计、修补和索引创建
【发布时间】:2012-04-11 06:25:16
【问题描述】:

在不久前的一次简短实验之后,我正在重新访问 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 将项目添加到 Show 内的 Entries 集合中?我想要一个索引,它将根据 Dog 属性总结条目。如果对文档进行修补,是否会处理索引?

【问题讨论】:

    标签: ravendb


    【解决方案1】:

    从外部角度来看,您的设计肯定是明智的。您需要问自己的一个大问题是,“您打算在大多数情况下查询什么?”

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

    要回答您的最后一个问题,修补肯定会导致重新索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      相关资源
      最近更新 更多