我最近开始研究RavenDB,并试图看看它是否适合我们的一些项目。然而,我遇到了一些关于“正确”的方法来建模一个简单的数据结构的问题。我试着描述一下:
从视觉上看,结构将是:
- Categories (0 or more)
- Links (0 or more)
在实际数据中,在每个根指南下大约有20个根指南和大约3-5个子指南。在每个指南(根指南和子指南)下,有15-25个类别。在每个类别下有5-20个链接。
我最初的想法是把它建模成这样(简化模型):
Guide
---------------
Id
ParentGuideId
Title
Category
---------------
Id
GuideId
Title
Link
---------------
Id
CategoryId
Title这基本上就是关系模型,我意识到这可能不是在RavenDB中对数据建模的正确方式。那么,另一个选择是什么?问题是,我不想像这样存储等级:
Guide
---------------
Id
Title
SubGuides
Categories
SubGuide
---------------
Title
Categories
Category
---------------
Title
Links
Link
---------------
Title因为它会产生可能有数千个子对象的文档。请记住,上面的模型是简化的。实际上,每种类型都有更多的数据,所以如果我们采用这种模型,RavenDB中的20个根指南文档将是巨大的。
还有别的选择吗?也许这是我多年来对关系数据库(关系数据库)的坏看法,但也许这个场景不太适合RavenDB,也不适合SQL?
编辑(添加基本查询)
对数据的访问相当简单。我有以下要求:
基本上这就是我所需要的。然而,评估RavenDB或类似功能的原因之一是增加了一些搜索功能。正如我已经提到的,有一些关于链接,类别和指南的更多的信息,如描述,标签等,所以很高兴能够搜索所有这些。
发布于 2012-09-11 12:10:54
我会处理一些事情,使指南成为一份文件。类别和链接嵌入到该文档中。
指南可以有一个子指南的集合。
第一个查询是使用它们的子类查询所有Guides。你就这样做:
session.Query<Guide>().Include(x=>x.SubGuides).Where(x=>x.Parent == null).ToList();这将在一个服务器查询中将其全部提供给您。
session.Include<Guide>(x=>x.SubGuides).Load("guides/123")这将给你一个指南和所有的子指南。
https://stackoverflow.com/questions/12349501
复制相似问题