繁体   English   中英

NoSql文档结构

[英]NoSql document structure

我有3个表的数据库:品牌(想想MacDonalds)->商店->销售

每个商店都有很多销售,每个品牌都有许多商店。 如果我想查询麦当劳有多少笔销售量以生成报告,如何组织品牌文件? 我是否将sales字段保留在品牌文档中,每当每个商店进行销售时都会更新该字段,还是将sale字段保留在商店文档中,然后遍历所有商店以创建每个品牌的销售总额。

第一种方法可能在读取时表现更好,而第二种方法在写入时表现更好。 我的数据库的读取次数将比写入次数更多(至少在开始时如此),因此我很想知道在MongoDB中实现此目的的标准方法是什么。

来自关系数据库,我可能会有Shops-> BrandShops-> Shop-> Sales等,但是我只是在尝试Mongo。 谢谢。

当您在MongoDB中具有一对多关系时,通常最好将数据嵌入到拥有的对象中,而不是用数据库引用表示该关系。 原因是MongoDB不支持联接-当您需要来自两个不同集合的数据时,您需要分别查询两个集合。

当存在多对多关系时,应该使用引用数组而不是嵌入,因为否则,您将必须更新所有嵌入了更改对象的对象。

但是请注意,MongoDB中每个文档的大小限制为16MB。 当带有嵌入对象的对象可能接近此限制时,您仍应使用引用(以拥有对象中数组的形式或拥有对象中的字段的形式)。

MongoDB中的引用可以是对象ID, DBRef (许多驱动程序可以自动或半自动解析)或自定义的唯一标识符(例如名称或ID号)。 后者的优势在于,您可以向用户显示相关文档的有意义的概览列表,而无需查询所有文档。 不用说,该字段在引用的集合中应具有唯一的索引。 您还可以将引用与引用对象的一些基本数据点结合起来,以便向用户提供更有意义的预览。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM