私はmangodbのデータモデルを設計していますが、以下のjsonと同様の要件があります。
Single_Collection。
{
"collegeid": 1234,
"Name": "aaaa",
"otherinfo": 1,
"studnet":[
{
"stdid": 1,
"name": "n1"
},
{
"stdid": 2,
"name": "n2"
}
]
}
2つのコレクション。
大学情報
{
"collegeid": 1234,
"Name": "aaaa",
"otherinfo": 1
}
学生情報コレクション
{
"collegeid": 1234,
"stdid": 1,
"name": "n1"
}
{
"collegeid": 1234,
"stdid": 2,
"name": "n2"
}
読書パフォーマンスの中間(単一のコレクションを持っているか、それを分離する)のより良い方法はどれですか、私は与えられた学生IDが大学IDを見つけるようにもっと読んでいます。学生IDリストは非常に大きくなります。
また、私はより多くの学生挿入操作を実行します
IMO、各モデル設計には独自の長所と短所があります。「より良い方法」とは、ユースケースによって異なります(データのクエリ方法?最初にすべてのデータが必要ですか?ページングが必要ですか?など)。 。)
要件から始めましょう。
1つの大学には多くの学生がいますが、各学生は1つの大学にしか滞在できないため、明らかに大学と学生は1:mマッピングです。
いくつかの異なるモデルデザインを紹介し、各モデルの長所と短所も示します。
これはあなたが単一のコレクションとして言及したデザインです。
{
"collegeid":1234,
"Name":"aaaa",
"otherinfo":1,
"studnet":[
{
"stdid":1,
"name":"n1"
},
{
"stdid":2,
"name":"n2"
}
]
}
長所:
短所:
これはあなたが2つのコレクションとして言及したデザインです。これはRDBMSテーブルに似ており、学生モデルはその大学への参照キーポイントを所有しています。
{
"collegeid":1234,
"Name":"aaaa",
"otherinfo":1
}
{
"collegeid":1234,
"stdid":1,
"name":"n1"
}
{
"collegeid":1234,
"stdid":2,
"name":"n2"
}
長所:
"collegeid"
と"stdid"
フィールドを追加することを忘れないでください。短所:
このアプローチは、アプローチ1とアプローチ2を混同しているように見えます。2つのコレクションがあります。大学では、学生がそれ自体に埋め込まれ、別の学生コレクションもあります。したがって、学生データは両方のコレクションで複製されます。
{
"collegeid":1234,
"Name":"aaaa",
"otherinfo":1,
"studnet":[ // duplicated here!
{
"stdid":1,
"name":"n1"
},
{
"stdid":2,
"name":"n2"
}
]
}
{
"collegeid":1234,
"stdid":1,
"name":"n1"
}
{
"collegeid":1234,
"stdid":2,
"name":"n2"
}
長所:
短所:
これはアプローチ3の変形です。ユースケースは次のとおりであると想定しています。
簡単に言うと、ユーザーは最初はすべての学生の完全なデータを必要とせず、学生の基本情報(学生IDなど)が必要なだけです。ユーザーがそのようなシナリオを受け入れる場合は、以下のモデルを使用できます。
{
"collegeid":1234,
"Name":"aaaa",
"otherinfo":1,
"studnetIds":[1, 2] // only student IDs are duplicated
}
{
"collegeid":1234,
"stdid":1,
"name":"n1"
}
{
"collegeid":1234,
"stdid":2,
"name":"n2"
}
大学にはスタッドネットIDしかありません。これがアプローチ3との違いです。
長所:
短所:
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加