Database mongodb建模

Database mongodb建模,database,mongodb,mongoose,Database,Mongodb,Mongoose,我有两个基本表客户端和包。客户端可以有多个包。哪种方法更好 一,================================== 客户端表包表 id:package\u id: 客户名称:包名称: 包:[{package\u id:,package\u key:}]状态: 二,=================================== 客户端表、包表和客户端包透视表即使没有MongoDB,也不需要透视表,因为它是一对多关系(不是多对多关系)。对于MongoDB,方法是相同的。 查

我有两个基本表客户端和包。客户端可以有多个包。哪种方法更好

一,================================== 客户端表包表 id:package\u id: 客户名称:包名称: 包:[{package\u id:,package\u key:}]状态:

二,===================================
客户端表、包表和客户端包透视表即使没有MongoDB,也不需要透视表,因为它是一对多关系(不是多对多关系)。对于MongoDB,方法是相同的。 查看有关关系的信息

客户端可以有多个包

嵌入和引用都可以用于客户机(1)和包(N)的这种一对多关系。嵌入或引用可以在任意一侧进行,这是四种不同的建模方法。这四种方法中的每一种都有自己的用例

但是,最常见和最简单的方法是在“一”端嵌入“多”端。在以下情况下,此功能可以正常工作:

  • “多”一方的数量少,文件的大小也小
  • 双方数据的查询是一起完成的
客户:

注意:包表示为子文档数组。而且,所有的包数据都嵌入到客户机本身中——全部都在一个集合中


以下是使用引用进行建模的方法:

这是一种更常用的引用方式,即“多”端中的“一”端。请注意,在此模型中,许多包可以具有相同的客户端。在以下情况下,首选此建模:

  • 文件数量多,尺寸大
  • 查询通常针对单个集合(而不是一起)进行
客户:

套餐:

id:19
名称:“pkg-01”
客户:“c-1”--参考
id: 1
name: "a-1"
status: true
packages: [ { id: 1, name: "abc" }, { id: 2, name: "xyz" }, ... ]
id: 1
name: "c-1"
status: true
id: 19
name: "pkg-01"
client: "c-1"    -- <client-name> reference