あなたのような同じようなニーズを持つ人の助けになれば幸いです。
MongoDB でのスキーマ設計とデータ モデリング
データ モデリングの視点
- 概念データ モデリング: 機能とサービスに関する全体像。
- ER データ モデリング: データベース設計へのグラフィカルなアプローチ。
- スキーマ設計
- 論理データ モデリング: 概念的なデータ モデリングは、プログラミング言語、テーブルなどを使用して論理データ モデリング (プログラム) に変換されます (サーバー コード)。
- 物理データ モデリング: ユーザーが実際のデータを挿入する論理的 DM を実践する (データベース)。
データ モデルの種類
- フラット、スター、階層、リレーショナル、オブジェクト リレーショナル
ドキュメント間のモデル関係
- 一般に、アプリケーションが 1 回の読み取り操作で必要なすべての情報を受け取るように、スキーマを構築する必要があります。
埋め込みドキュメントを使用して 1 対 1 の関係をモデル化する
- In referenced or normalized data model, If one document is frequetly refering some data in another document, It would create better data model to embed both documents into one.
- If a single document seems to be large, it is better split your data into referential model, the most frequently-accessed portion of the data should go in the collection that the application loads first
```json
// one person and one address
{
_id: "joe",
name: "Joe Bookreader",
address: {
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: "12345"
}
}
```
埋め込みドキュメントを使用して 1 対多の関係をモデル化する
- また、モデルの設計に関しても、1 対 1 と同じコンセプトに基づいています。
// one person and his multiple address
{
"_id": "joe",
"name": "Joe Bookreader",
"addresses": [
{
"street": "123 Fake Street",
"city": "Faketon",
"state": "MA",
"zip": "12345"
},
{
"street": "1 Some Other Street",
"city": "Boston",
"state": "MA",
"zip": "12345"
}
]
}
参照ドキュメントを使用して 1 対多の関係をモデル化する
- 場合によっては、以下のようにパフォーマンスを向上させるために参照モデルを使用することをお勧めします。
- 出版社データの重複を避けるには、参照を使用し、書籍コレクションとは別のコレクションに出版社情報を保管してください。
{
_id: 'some string'
name: "O'Reilly Media",
founded: 1980,
location: "CA",
books: [123456789, 234567890, ...]
}
{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English"
}
{
_id: 234567890,
title: "50 Tips and Tricks for MongoDB Developer",
author: "Kristina Chodorow",
published_date: ISODate("2011-05-06"),
pages: 68,
language: "English"
}
- 将来、books 配列が巨大になる可能性がある場合は、出版社の参照を book ドキュメント内に格納することをお勧めします。
_id
BOOK COLLECTION で情報 (つまり、出版社 ID) が として参照されるスキーマのインテリジェントな変更を観察しますpublisher_id
。
{
_id: "oreilly",
name: "O'Reilly Media",
founded: 1980,
location: "CA"
}
{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: "oreilly"
}
{
_id: 234567890,
title: "50 Tips and Tricks for MongoDB Developer",
author: "Kristina Chodorow",
published_date: ISODate("2011-05-06"),
pages: 68,
language: "English",
publisher_id: "oreilly"
}