【发布时间】:2015-06-16 06:30:02
【问题描述】:
我正在使用 RavenDB 存储三种类型的课程:单元、课程和活动。这三种类型都继承自 CurriculumBase:
public abstract class CurriculumBase
{
public string Id { get; set; }
public string Title { get; set; }
public List<string> SubjectAreaIds { get; set; }
// non-relevant properties removed
}
这些文档具有层次关系,因此我将层次结构建模为单独的单个文档,如下所示:Modelling Hierarchical Data with RavenDB
public class CurriculumHierarchy
{
public class Node
{
public string CurriculumId { get; set; }
public string Title { get; set; }
public List<Node> Children { get; set; }
public Node()
{
Children = new List<Node>();
}
}
public List<Node> RootCurriculum { get; set; }
public CurriculumHierarchy()
{
RootCurriculum = new List<Node>();
}
}
我需要能够搜索所有课程文档。对于简单的属性,使用多地图索引似乎很容易。
但是,我需要能够搜索的属性之一(结合其他搜索条件)是 SubjectAreaId。我需要能够获得它或其任何祖先具有指定学科领域ID的课程。换句话说,出于搜索目的,文档应该继承其祖先的 subjectAreaIds。
我考虑过对 subjectAreaIds 进行反规范化,并将计算出的完整的 subjectAreaIds 集存储在每个文档中,但是每当层次结构本身或任何给定文档的祖先的 subjectAreaIds 发生变化时,都需要进行更新。我希望这是我可以通过索引完成的事情,或者可能需要一种完全不同的方法。
【问题讨论】:
标签: ravendb