情報処理安全確保支援士 2019年 秋期 午前2 問21
問題文
JSON 形式で表現される図 1,図2のような商品データを複数の Web サービスから取得し、商品データベースとして蓄積する際のデータの格納方法に関する記述のうち、適切なものはどれか。ここで、商品データの取得元となる Web サービスは随時変更され、項目数や内容は予測できない。したがって、商品データベースの検索時に使用するキーにはあらかじめ制限を設けない。

選択肢
ア:階層型データベースを使用し、項目名を上位階層とし、値を下位階層とした2階層でデータを格納する。
イ:グラフ型データベースを使用し、商品データの項目名の集合から成るノードと値の集合から成るノードを作り、二つのノードを関係づけたグラフとしてデータを格納する。
ウ:ドキュメント型データベースを使用し、項目構成の違いを区別せず、商品データ単位にデータを格納する。(正解)
エ:リレーショナルデータベースを使用し、商品データの各項目名を個別の列名とした表を定義してデータを格納する。
🔒 解説は解答すると表示されます
ドキュメント型DB【午前2解説】
正解の理由
複数の外部 Web サービスから取得する JSON データは、項目数や項目名が随時変化し、スキーマが予測できません。このような「レコードごとに構造が異なる」データをそのまま格納し、必要に応じてフィールド単位での検索・インデックス化や部分更新を行いたい場合、ドキュメント型データベースが適しています。ドキュメント型DBは各商品を JSON ドキュメント単位で保存し、スキーマを固定せずに格納できるため、自然に可変スキーマを扱えます。したがって、選択肢のうちウが適切です。
解法ステップ
- 問題の要件を整理する
- 取得元が随時変更され、項目数・内容が予測できない
- 検索時のキーに制限を設けない(任意フィールドで検索する可能性がある)
- 各 DB 種別の特性を照合する
- スキーマ固定・列定義が必須か、スキーマレスに対応するかを確認
- フィールド差分を許容しても検索性能や拡張性が適切かを検討
- 最も要件に合致する方式を選ぶ
- 可変スキーマかつドキュメント単位での保存と検索・インデックスが容易な方式を選ぶ
- 結論:ドキュメント型DB(ウ)
選択肢別の誤答解説
- ア: 階層型データベースを使用し、項目名を上位階層とし、値を下位階層とした2階層でデータを格納する。
誤り。階層型データベースはツリー構造(多層化可能)であり、2階層に限定されるわけではありません。ただし、今回の要件では項目が可変で自由なキー検索を許す必要があり、階層型は固定的な親子関係やツリー構造の利用に向く設計です。属性集合が大きく変動する JSON をそのまま柔軟に扱う点では不利で、検索時に任意フィールドを効率的に検索・索引化する運用が難しくなることがあります。 - イ: グラフ型データベースを使用し、商品データの項目名の集合から成るノードと値の集合から成るノードを作り、二つのノードを関係づけたグラフとしてデータを格納する。
誤り(不適切)。グラフDBはリレーションの複雑な結びつき(ネットワークやソーシャル連携、多段リレーションなど)を表現・探索するのに強みがありますが、各商品ごとに大量かつ多様な属性をそのまま保存して随時検索キーを変える用途にはオーバーヘッドが大きく、設計とクエリが複雑になります。関連商品などの関係性表現は得意でも、可変フィールドの格納・汎用検索という観点ではドキュメント型の方が実用的です。 - ウ: ドキュメント型データベースを使用し、項目構成の違いを区別せず、商品データ単位にデータを格納する。
適切。各商品を JSON ドキュメントとしてそのまま保存でき、スキーマのばらつきを許容します。必要に応じて任意のフィールドにインデックスを張ったり、全文検索や部分抽出を行えます。可変スキーマで検索キーを固定しない要件と親和性が高いです。 - エ: リレーショナルデータベースを使用し、商品データの各項目名を個別の列名とした表を定義してデータを格納する。
誤り。列を固定すると項目が増減するたびにスキーマ変更(列追加)が必要になり運用が困難です。EAV(属性-値)モデルなどで可変属性を表現する手はありますが、性能劣化やクエリ複雑化、集計や型管理の困難さといったデメリットが出やすく、要件には不向きです。
よくある誤解
- 階層型DBは必ず「2階層」しか持てない:誤り。階層型DBはツリー構造で多層化できるが、今回の可変フィールドと任意キー検索という要件には合致しない点が問題となります。
- 「ドキュメント型DBはスキーマレスだから何もしなくてよい」:誤り。スキーマレスでも運用上は索引設計、データ整合性、検索要件に合わせたフィールド設計やバリデーションが必要です。
補足コラム
ドキュメント型DBは「スキーマをアプリ側で管理する(schema-on-read)」設計に向いています。つまり格納時に厳格な列定義を要求せず、読み出し時に必要なフィールドを解釈・検証します。典型的な運用例としては:
- 基本はドキュメント単位で保存し、検索で頻出するフィールドだけを個別にインデックス化する
- 関連関係(例:関連商品)はドキュメント内の配列や参照で表現し、必要に応じて別コレクションでノーマライズする
- スキーマ進化が必要な場合はマイグレーションスクリプトやアプリ側の互換処理で対応する
柔軟性と検索性能の両立は、インデックス化戦略と運用ルールで決まります。
FAQ
Q. リレーショナルDBで JSON 型(例: JSONB)を使えば同じことはできませんか?
A. JSON 型を備えた RDBMS なら可変フィールドの格納は可能です。ただし大規模な可変属性の検索やインデックス運用、スキーマ変更の柔軟性という点ではドキュメントDBが設計・運用面で有利なことが多いです。要件と既存技術スタックを考慮して選択してください。
A. JSON 型を備えた RDBMS なら可変フィールドの格納は可能です。ただし大規模な可変属性の検索やインデックス運用、スキーマ変更の柔軟性という点ではドキュメントDBが設計・運用面で有利なことが多いです。要件と既存技術スタックを考慮して選択してください。
Q. 関連商品(ID配列)のような関係はどう扱うべきですか?
A. 小規模の参照ならドキュメント内の配列で持ち、頻繁に結合して参照整合性が必要なら参照先を別コレクション(または別テーブル)に分けて必要時にフェッチする運用が現実的です。
A. 小規模の参照ならドキュメント内の配列で持ち、頻繁に結合して参照整合性が必要なら参照先を別コレクション(または別テーブル)に分けて必要時にフェッチする運用が現実的です。
Q. 全てをドキュメント型DBで運用するリスクは?
A. 適切なインデックスを張らないと検索性能が低下する、データ整合性(型や必須項目)の管理が難しい、複雑な集計は RDBMS より不得手、などが挙げられます。用途に応じたハイブリッド運用も検討してください。
A. 適切なインデックスを張らないと検索性能が低下する、データ整合性(型や必須項目)の管理が難しい、複雑な集計は RDBMS より不得手、などが挙げられます。用途に応じたハイブリッド運用も検討してください。
関連キーワード: JSON、ドキュメントDB、スキーマレス、NoSQL、階層型DB、グラフDB、リレーショナルDB、索引設計、EAV、JSON検索

\ せっかくなら /
情報処理安全確保支援士を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

