【どきゅめんとしこうでーたべーす】

ドキュメント指向データベース とは?

最終更新:
💡 関連する項目を、ひとまとまりのドキュメントに保存

JSONやBSONなどの構造化されたドキュメントを単位にデータを保存するデータベース。MongoDBやCouchDBが例で、入れ子のデータや異なる項目を持つデータを扱える。

📌 このページのポイント
表とドキュメント:データの表し方 リレーショナルDBの表の例 商品 本 服 著者 著者A — サイズ — M ドキュメントの例(同じコレクション) { "商品": "本", "著者": "著者A" } { "商品": "服", "サイズ": "M" } 項目が異なっていても、ひとまとまりで保存 必要な項目や型のルールは設計する
説明用の例。「—」は該当項目なしを表します。MongoDBの実際の保存形式はBSONで、この図ではJSON風に簡略化しています。
ひよこ ひよこ
ドキュメント指向データベースって普通のデータベースと何が違うの?
ペンギン先生 ペンギン先生
リレーショナルDBが表を中心に扱うのに対し、フィールドと値を持つドキュメントを単位に保存するんだ。たとえば商品名・価格・タグの配列を1つにまとめられる。ここでいうドキュメントはWordファイルのことではないよ。
ひよこ ひよこ
JSONで保存するメリットって何?
ペンギン先生 ペンギン先生
項目の違うデータや入れ子の構造を扱いやすいんだ。たとえば本には著者、服にはサイズを持たせて同じ商品コレクションに保存できる。実際の保存形式は製品によって違い、MongoDBはJSONに似たBSONを使うよ。
ひよこ ひよこ
自由なら、データの設計はいらない?
ペンギン先生 ペンギン先生
設計は必要だよ。商品名がない、価格に文字が入っている、という状態ではアプリが困るよね。MongoDBでは必須項目や型などの検証ルールを設けられるし、検索や更新のしやすさを考えて構造を決めるんだ。
ひよこ ひよこ
じゃあ全部ドキュメント指向にすればいいんじゃない?
ペンギン先生 ペンギン先生
用途によるよ。関連情報を1つに埋め込むとまとめて読めるけれど、同じ情報を重複させると更新の管理が必要になる。参照で分ける方法もあるし、MongoDBには結合用の $lookup もある。関係の多さや検索・更新の仕方に合わせて選ぼう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ドキュメント指向データベース」って出てきたら「関連するデータをJSONのようなかたまりで保存するデータベース」と思えばだいたいOK!
📖 おまけ:英語の意味
「Document-Oriented Database」 = ドキュメント指向データベース
💬 ここでのDocumentはWordファイルではなく、JSONのような構造化されたデータのかたまりのことだよ

参考資料

← 用語集にもどる