假設我需要將經理/員工關係存儲在mongoDB數據庫中,並且爲了舉例說明可以說這些是兩個不同的集合。我一般儘量通過構造文件/ DB這樣來顯示這種關係:用於存儲子關係的MongoDB體系結構最佳實踐?
經理收集文件:
{
id: 1,
name: "Bill Smith"
}
員工託收:
{
id: 1,
name: "Abe Smith",
managerId: 1
},
{
id: 2,
name: "Hank Smith",
managerId: 1
}
但我經常看到有人存儲這種關係通過這種方式:
方法#2
經理收集文件:
{
id: 1,
name: "Bill Smith",
employees: [1, 2]
}
員工託收:
{
id: 1,
name: "Abe Smith"
},
{
id: 2,
name: "Hank Smith"
}
的缺點,我用第二種方法看到的是employees
陣列可以不同步的,如果一個員工從刪除它是集合,但不是數組。
我很好奇,如果任何人都可以指出兩種不同方法的優缺點,並且一般認爲是在MongoDB中存儲像這樣的子關係的最佳實踐嗎?
第一種方法中的同樣缺點,如果管理器被刪除。如果您使用任何類型的ODM(更新整個文檔),則第二種方法可能不太方便。使用併發更新時,可能會丟失employees數組中的一些元素。沒有$ push/$ pull更新的問題。另外第一種方法對於$ lookup聚合更簡單。如果一個人有很多管理者,第二種方法似乎很好。作爲一個經驗法則,模式應該支持查詢,而不僅僅反映關係,這與SQL方法略有不同。 –
關於模式應該支持查詢的真正好點不僅僅是反映關係。 –