私はマネージャ/従業員関係をmongoDBデータベースに格納する必要があります。たとえば、これらは2つの異なるコレクションです。MongoDBアーキテクチャの子関係を保存するベストプラクティス?
マネージャー収集文書:
{
id: 1,
name: "Bill Smith"
}
従業員のコレクションのドキュメント:私は一般的に、このようなドキュメント/ DB構成することにより、この関係を表示しようとする
{
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
配列は同期の出る可能性があることですコレクションではありますが、配列ではありません。
誰かが2つの異なる方法の長所/短所を指摘できるかどうか、またMongoDBにこのような子関係を保存するためのベストプラクティスと一般に考えられているのであれば、私は興味がありますか?
管理者が削除された場合の最初の方法と同じ同期の欠点。 2つ目の方法は、ドキュメント全体を更新するODMを使用している場合はあまり便利ではありません。同時更新では、employees配列内のいくつかの要素が失われる可能性があります。 $ push/$ pullの問題はありません。また、最初の方法は$ルックアップ集約の方が簡単です。第2の方法は、ある人に多くの管理者がいれば良いと思われる。経験則として、スキーマは問合せをサポートする必要があります。関係を反映するだけでなく、SQLのアプローチとは少し異なります。 –
スキーマがクエリをサポートすべきであるという点に関しては、関係を反映するだけではありません。 –