如何在mongodb中设计多对多关系?

时间:2019-07-14 10:46:33

标签: mongodb

当前场景是这样:

有一个类别表[category],记录数仅超过50,几乎没有增加,而且修改很少。

有一个产品表[product]当前有数百万个级别,将一直增加。

这两个是多对多关系。一个类别将具有更多产品,而每个产品将具有多个类别。

类别列表几乎不会更改,并且一个类别中大约有1000种产品,并且类别列表不会频繁更改。

查询要求:

  1. 查询所有类别(不包括该类别下的产品列表)
  2. 通过product_id查询类别列表
  3. 按category_id查询产品列表

操作要求:

  1. 修改类别中的产品列表(将产品添加/删除到类别中,对类别中的产品列表进行排序,因此类别中的产品列表需要排序。)

这种场景的多对多设计比较好,有几点:

1。如果遵循SQL数据库的设计,请添加类别<->产品关系表。

  • [问题] 每种产品的顺序维护得不好。例如,前端对一类产品执行大规模调整订单,然后提出请求。 Category <-> Product关系表还需要添加索引字段以指示订单,并且需要更新许多记录。它对操作要求不是特别友好,有什么可以优化的吗?

2。 NOSQL的方式。将产品:[]直接添加到类别中以指示该类别中的项目列表。

  • [评估] 在查询要求中,需要查询所有类别(不包括该类别下的产品列表),这将在以下位置提取大量不必要的数据(产品)一度。不适用。

3。添加产品:[]在类别<->产品关联表中

  • [问题] 这可以满足操作要求,但是如果您要满足Query requirments-2 [通过product_id查询类别列表],如何查询它会不会出现性能问题?

1 个答案:

答案 0 :(得分:0)

您需要第三个表(连接表)来完成关系。这些键必须是主键以及外键约束。

       tblProductCategories
       PK product_id FK
       PK category_id FK