第一步 定義要描述的數據集 當我們決定將數據存儲下來的時候,我們首先要回答的一個問題就是:“我打算存儲什麼樣的數據?這些數據之間有什麼關係?實體之間有什麼關係?實體的屬性之間有什麼關係”。 為了說明問題,我們這兒舉例的場景是要描述 庫存清單的資料庫,庫存清單數據 包括 物料名稱、數量、規格大小、狀態 ...
第一步 定義要描述的數據集
當我們決定將數據存儲下來的時候,我們首先要回答的一個問題就是:“我打算存儲什麼樣的數據?這些數據之間有什麼關係?實體之間有什麼關係?實體的屬性之間有什麼關係”。
為了說明問題,我們這兒舉例的場景是要描述 庫存清單的資料庫,庫存清單數據 包括 物料名稱、數量、規格大小、狀態、標簽說明、等級。
如下list是我們希望關於庫存清單的部分格式數據
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 |
(備註: cm 為長度單位,釐米;in 也是長度單位:1in=25.4mm==2.54cm)
第二步 JSON 化 思維
上面表中的size 和 tags 欄位 都存儲了多個值,例如Size 既有大小 的數字描述還有它們單位的描述,tags 這種標簽的說明更是難以統一,可能此物料只有一個屬性說明,而其他物料可能有多個屬性的說明。這種欄位如果在關係型資料庫中存儲,假設存儲在一個欄位中,那麼查詢起來比較費時,模式化也比較困難。如果拆開放到不同的表中,完整性就不是很好,表的設計也是難以清晰,表Join查詢也會有性能下降。
在MongoDB 數據中,數據都是以文檔的形式存儲的。這些文檔都是以JSON(JavaScript Object Notation)格式設計存在的【物理盤上實際是以BSON格式存儲的】。JSON文檔支持內嵌欄位。因此,我們可以將關聯性強的數據或同一個List中的數據存儲在同一個文檔中,此時,不再需要存儲在SQL資料庫中多個表中【如果在SQL資料庫,需要多個表,來描述關聯】。
JSON 格式就是將數據存為 鍵/值對 。在JOSN文檔中,鍵和值 之間用 冒號(:)隔開;一個個鍵/值之間用逗號(,)隔開,同一個文檔中的一組鍵/值包含在一個花括弧({})中。
例如,下麵List中的 name
和 quantity
欄位數據 JSON化,
name | quantity | size | status | tags | rating |
---|---|---|---|---|---|
notebook | 50 | 8.5x11,in | A | college-ruled,perforated | 8 |
將這兩個欄位JOSN化,就是下麵這個形式:
{"name": "notebook", "qty": 50}
第三步 針對多值欄位,選擇合適的數據模型
針對多值的欄位,我們可以從內嵌模型、數組 List 模型兩種數據模型中選擇一種。
例如上面 庫存清單數據的那個例子,我們可以將Size,設計成內嵌模型,這個Size 可以有三個屬性:高、寬、計量單位。
{ "h": 11, "w": 8.5, "uom": "in" }
一些商品原料,可能又多個等級得分,我們可以將這些等級得分存儲在一個數組list中,例如上面例子中的ratings欄位。
[ { "score": 8 }, { "score": 9 } ]
上面例子中的tags 也可以存放在數組list中
[ "college-ruled", "perforated" ]
那麼其中的關於notebook的記錄數據 如下
notebook | 50 | 8.5x11,in | A | college-ruled,perforated | 8,9 |
而將其 JOSN 化後,要存的文檔樣式如下:
{
"name": "notebook",
"qty": 50,
"rating": [ { "score": 8 }, { "score": 9 } ],
"size": { "height": 11, "width": 8.5, "unit": "in" },
"status": "A",
"tags": [ "college-ruled", "perforated"]
}
以上過程就是數據記錄的JSON過程、文檔化過程。
註: 以上內容作者翻譯自 MongoDB 官網,網址為 https://docs.mongodb.com/guides/server/introduction。
因作者非專業翻譯人員,難免有錯誤或不准確的地方,請見諒。