参考:https://docs.mongodb.com/guides/server/introduction/#what-you-ll-need
(一)定义数据集
当需要建立数据存储时,首先应该思考以下问题:需要存储哪些数据?这些字段之间如何关联?这是一个数据建模的过程。目标是将业务需求抽象为逻辑模型 。假设这样一个场景:我们需要建立数据库以跟踪物料及其数量,大小,标签和等级。如果是存储在 RDBMS,可能以下的数据表:
name | quantity | size | status | tags | rating |
---|---|---|---|---|---|
journal | 25 | 14x21,cm | A | brown, lined | 9 |
notebook | 50 | 8.5x11,in | A | college-ruled,perforated | 8 |
paper | 100 | 8.5x11,in | D | watercolor | 10 |
planner | 75 | 22.85x30,cm | D | 2019 | 10 |
postcard | 45 | 10x,cm | D | double-sided,white | 2 |
(二)思考 JSON 结构
从上例中可以看出,表似乎是存储数据的好地方,但该数据集中的字段需要多个值,如果在单个列中建模,则不容易搜索或显示(对于 例如–大小和标签)。在 SQL 数据库中,您可以通过创建关系表来解决此问题。在 MongoDB 中,数据存储为文档(document)。 这些文档以 JSON(JavaScript 对象表示法)格式存储在 MongoDB 中。 JSON 文档支持嵌入式字段,因此相关数据和数据列表可以与文档一起存储,而不是与外部表一起存储。JSON 格式为键/值对。 在 JSON 文档中,字段名和值用冒号分隔,字段名和值对用逗号分隔,并且字段集封装在“大括号”({}
)中。如果要开始对上面的行之一进行建模,例如此行:
name | quantity | size | status | tags | rating |
---|---|---|---|---|---|
notebook | 50 | 8.5x11,in | A | college-ruled,perforated | 8 |
您可以从 name 和 quantity 字段开始。 在 JSON 中,这些字段如下所示:
{ "name": "notebook", "qty": 50 }
(三)确定哪些字段作为嵌入式数据
接下来,需要确定哪些字段可能需要多个值。可以考虑将这些字段作为嵌入式文档或嵌入式文档中的 列表/数组 对象。例如,在上面的示例中,size 可能包含三个字段:
{ "h": 11, "w": 8.5, "uom": "in" }
And some items have multiple ratings, so ratings
might be represented as a list of documents containing the field scores
:
[{ "score": 8 }, { "score": 9 }]
And you might need to handle multiple tags per item. So you might store them in a list too.
["college-ruled", "perforated"]
Finally, a JSON document that stores an inventory item might look like this:
{
"name": "notebook",
"qty": 50,
"rating": [{ "score": 8 }, { "score": 9 }],
"size": { "height": 11, "width": 8.5, "unit": "in" },
"status": "A",
"tags": ["college-ruled", "perforated"]
}
This looks very different from the tabular data structure you started with in Step 1.
下一节:数据建模中的关键挑战是平衡应用程序的需求、数据库引擎的性能以及数据检索模式。 在设计数据模型时,始终需要考虑数据的应用程序使用情况(即数据的查询,更新和处理)以及数据本身的固有结构。