我最近开始关注RavenDB,我试图看看它是否适合我们的一些项目。但是,我遇到了一些关于模拟简单数据结构的“正确”方法的问题。我会试着描述一下:
视觉上结构将是:
在实际数据中,每个根指南下有大约20个根指南和大约3-5个子指南。根据每个指南(根指南和子指南),有15-25个类别。在每个类别下,有5到20个链接。
我最初的想法是像这样建模(简化模型):
Guide
---------------
Id
ParentGuideId
Title
Category
---------------
Id
GuideId
Title
Link
---------------
Id
CategoryId
Title
这几乎是关系模型,我意识到这可能不是在RavenDB中建模数据的正确方法。那么替代方案是什么?我想问题是,我不想像这样存储Hierarchy:
Guide
---------------
Id
Title
SubGuides
Categories
SubGuide
---------------
Title
Categories
Category
---------------
Title
Links
Link
---------------
Title
因为它会导致文档中包含数千个子对象。请记住,上面的模型已经简化了。实际上每种类型的数据都要多得多,所以如果我们使用这个模型,RavenDB中的20个root-Guide文档将是巨大的。
还有其他选择吗?也许这是我多年来糟糕的关系 - 数据库培养谈话,但也许这种情况根本不适合RavenDB以及它适合SQL吗?
编辑(添加基本查询)
访问数据非常简单。我有以下要求:
这基本上就是我所需要的一切。但是,评估RavenDB或类似的原因之一是添加一些搜索功能。正如我已经提到的,链接,类别和指南有更多信息,例如描述,标签等。所以能够搜索所有这些信息会很好。
答案 0 :(得分:2)
我会处理事情,以便指南是一份文件。 类别和链接嵌入在该文档中。
指南可以有一组子指南。
第一个查询是查询所有指南及其潜艇。你这样做:
session.Query<Guide>().Include(x=>x.SubGuides).Where(x=>x.Parent == null).ToList();
这将在一个服务器查询中为您提供所有内容。
session.Include<Guide>(x=>x.SubGuides).Load("guides/123")
这将为您提供所有子指南的指南。