商店链的mongodb数据库设计

时间:2015-04-06 20:24:08

标签: node.js mongodb database-design

使用mongo。该应用程序需要允许在不同类型的位置购物。商店分享他们提供的部分产品,有些是独一无二的。每个商店都为每种产品设定了自己的价格(很多可能是相同的价格,但目前尚不清楚,可能不是)。

到目前为止,我的方法是创建一个Product模型,它只有名称,描述和类别。

然后,对于每个商店,将通过将价格与每个PriceList相关联来创建Product,从而仅为特定商店提供他们实际销售的产品。

但是如何建立这种关联?如果我有一个PriceList,我引用Product(例如通过ID),那么在浏览产品时,不会产生巨大的开销,因此生成商店的价目表会有{{{ 1}}大量查询查询pricelist.length模型的名称及其类别?

我的另一个想法是让每个价目表都有一个包含名称,描述,类别和价格的所有产品的清单,但是为新商店生成新的价格表似乎很麻烦,因为没有独立的{{1从中复制项目的列表?

还有其他建议吗?

2 个答案:

答案 0 :(得分:1)

您可能已经考虑过这一点,但是如果您需要确保使用NoSQL数据库(如MongoDB)是解决问题的正确方法。

使用RDBMS的好处是可以规范化数据并轻松进行连接。因此,一个表中的产品,另一个表中的定价,运行查询并从两个表中提取数据。听起来你已经来自这个世界,并且可能理解连接的概念。

NoSQL没有按设计加入相同的方式,因此它并不总是最合适的。相反,数据被认为是"文件"和收藏品。 NoSql在分层数据方面做得很好,但在很多情况下,数据必须重复。

如果商店及其产品/价格之间存在大量重复数据,那么使用常规关系数据库可能是最好的。

如果您仍想使用MongoDB,您有两种选择。

  1. 将产品/定价数据与每个商店文档放在一起,并且可以复制数据。
  2. 将产品/定价数据放在一个单独的集合中,并在每个商店需要时查询它。
  3. 当然这取决于你的架构,但我会倾向于上面的#2,因为你总是可以同时将查询与商店列表结合起来并以这种方式优化。如果您的数据增长,从长远来看,拆分设计也可能更好。如果两个集合足够大,您可以轻松地将它们放在不同的节点上,并查看MongoDB背后的真正功能。

    祝你好运!

答案 1 :(得分:0)

这样的事情怎么样:

Shop = {
    "Pricelist": {
                   "1": 2.99,
                   "5": 3.99
               }
}


Product = {
    "id": "1",
    "name" : "Lego"
}

请注意,1中的5Pricelist是指产品ID。通过这种方式,每家商店都可以设定自己的产品价格。