這是一個相當普遍的問題,在剛開始使用 MongoDB 之后,我試圖找到哪個是這種模式設計的更好選擇。
假設我們有這些物體:Product、Category和Order
在 SQL 場景中,這將是模式的傳統方法:
Category -> Product -> OrderDetails <- Order(一個類別有很多產品,每個產品只有一個類別 | 一個產品在多個訂單中,一個訂單有多個產品,因此我們創建了一個 OrderDetails 連接表)
在 MongoDB Schema 中應該如何使用相同的方法?假設一個類別具有在MOS T 10中,以12種產品。
場景 1:將產品嵌入到類別中:
類別:
{
"_id" : Category_ID,
"name" : "Category description"
"products" : [ { "product_name": "First product", "price": 500 }, { "product_name": "Second product", "price": 150 } ]
}
命令:
{
"_id" : Order_ID,
"order_total" : 500
"products" : [ { "product_name": "First product", "price": 500 }]
}
場景 B:將類別嵌入產品并按順序排列一系列產品參考
產品
{
"_id" : First product,
"price" : 500
"category" : { "category_name": "First category name", "description": "some random description" }
}
命令
{
"_id" : Order_ID,
"order_total" : 500
"products" : [ product id1, product id2]
}
uj5u.com熱心網友回復:
取決于每個類別有多少產品,將產品嵌入類別可能是一個理想的場景(檔案有 16MB 的限制),并且取決于使用模式,例如,您是否總是獲取一個類別并顯示里面的產品其中?還是每次都獲得產品的使用模式?
另一個要問的問題是,類別是否需要自己的身份,您是否有列出有關類別的更多資訊的頁面?或者一個類別只是一個描述?如果是這種情況,那么我個人會將其更多地視為標簽,請參見下面的示例:
{
"_id" : id,
"name" : "Product name",
"description" : "Product name",
"price" : 500
"categories" : [ "Category name 1", "Category name 2" ]
}
至于訂單檔案,我會將整個產品復制到訂單中,您總是會在 SQL 中看到類似的模式,這是因為如果產品的價格或名稱發生變化,您希望訂單具有下訂單時的產品。在客戶付款并發貨后,您不希望訂單價格發生變化。
{
"_id" : Order_ID,
// "order_total" : 500 * this would be calculated
"products" : [
{
"_id" : id,
"name" : "Product name 1",
"description" : "Product name 1",
"price" : 500
"categories" : [ "Category name 1", "Category name 2" ]
},
{
"_id" : id,
"name" : "Product name 2",
"description" : "Product name 2",
"price" : 500
"categories" : [ "Category name 1", "Category name 2" ]
}
]
}
我知道這不是一個真正的純粹答案,更像是一堆更多的問題,但是,我希望它為您的架構設計提供一些指導。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/401458.html
