对于MarkLogic(也许对于一般的noSQL来说?),最好将父子存储为一个文档吗?因此,如果来自关系世界,标准化的父子表将需要非规范化并存储为单个文档?
此设计是否会影响搜索的完成方式(因为现在始终在父级的上下文中搜索子级记录)?
答案 0 :(得分:1)
这可能取决于孩子是否可以拥有多个父母(例如图形类型的数据,而不是层次结构),但我的理由是对于分层数据,将其存储为自然的分层形式(使用XML或JSON等) ),最有意义。它并不意味着将整个父子表存储为一个文档,而是将记录扩展到其原始树,并将它们存储为文档。
这不适合所有NoSQL解决方案,但适用于那些属于文档商店类别的人,特别是如果他们提供良好的搜索内容和层次结构......如MarkLogic ..
注意:图形类型数据可以存储为MarkLogic内的三元组。这将允许使用SPARQL查询它,例如通过它进行推理..
HTH!
答案 1 :(得分:0)
并不是父子关系是“非规范化的”,而是将孩子“合并”到父母身上。
要考虑的一件事是你的关系类型。 UML提供了不同类型关系的描述 - 请参阅Difference between association, aggregation and composition。
一般情况下(存在例外情况),我认为关联和聚合关系将在不同的文档之间,而组合关系将“合并”到单个文档中。
具体示例 - 一个人知道很多人(协会),一个人可以拥有许多车辆(聚合,车辆只有一个所有者,但是它自己的生命周期),一个人可以拥有许多名字(组合)。我会创建人员和车辆文件,但不会创建名称文件 - 我会将所有名称存储在个人文档中。
对我来说,这是文档数据库相对于关系数据库的一大优势。在后者中,无论我有什么样的关系,我都被迫创建单独的表格。在文档数据库中,我可以选择最有意义的内容并满足我的应用程序的需求。通常,我的物理文档模型更接近于我的应用程序的概念模型。