ホーム > データベーススペシャリスト試験 > 2024年

データベーススペシャリスト試験 2024年 午前203


関係データベースのテーブルにレコードを1件追加したところ, インデックスとして使うB+B^+木のリーフノードCがノードC1とC2に分割された。ノード分割後のB+木構造はどれか。ここで, 矢印はノードへのポインタとする。また, 中間ノードAには十分な空きがあるものとする。
問題画像選択肢画像
A→B→C→Dの構造である。
A→B→C1→C2→Dの構造である。(正解)
A→B→C1→D→C2の構造である。
A→B→C1→D→C2の構造である。

解説

解説:B+木のノード分割後の構造について

関係データベースのインデックスとして使われるB+B^+木は、データの挿入や削除によってノードが満杯になると「ノード分割(スプリット)」という操作を行い、木の高さを調整しつつデータの検索効率を保ちます。

問題の状況整理

  • あるリーフノードCにレコードを1件追加した結果、ノードCが2つのノードに分割された:
    • ノードC1
    • ノードC2
  • 中間ノードAは空きがあり、そこに分割されたノードの情報を取り込むことが可能。
  • 矢印は「ノードへのポインタ」を示している。

B+木のノード分割の基本

  1. リーフノードの分割
    • リーフノードCが満杯になったため、分割して新しいリーフノードC2を作ります。
    • データは均等に分割される(例えば、キーの小さい方をC1、大きい方をC2に)。
    • 新しく分割されたリーフノードC2へのポインタ(リーフノードの最小キー)が親ノード(中間ノード)に挿入されます。
  2. 親ノードへの影響
    • 分割したリーフノードを指す新しいポインタ(キー)が親ノードBに挿入されます。
    • 親ノードBに空きがあれば、そのまま挿入されます。
    • この問題では、さらに中間ノードAに空きがあるため、影響はBからAに伝わる可能性があります。

問題の選択肢の確認

  • ア: (A \to B \to C \to D) — ノード分割前の状態に見える。分割によりCは2つに分かれたため不適切。
  • イ: (A \to B \to C1 \to C2 \to D) — 分割されたリーフノードC1とC2が連続しており自然な構造。
  • ウ: (A \to B \to C1 \to D \to C2) — 途中にDが入り、順序が崩れているため不自然。
  • エ: (A \to B \to C1 \to D \to C2) — ウと同じ理由で不適切。

正解の理由(イが正しい)

  • リーフノード分割後は、CはC1とC2という並列のリーフノードになります。
  • B+木では、リーフノードは横方向に「連結リスト」のようにつながっており、C1の次はC2、C2の次はDという形で順序を保ちます。
  • 親ノードは、分割により追加されたC2の最小キーのポインタを持つため、祖先ノードからは(A \to B \to C1 \to C2 \to D)という枝分かれのない順序になります。

まとめ

B+木のリーフノードが分割されると、分割された2つのリーフノードは横に並んで連結され、その親ノードには新たなポインタ(キー)が挿入される。よって、ノードCがノードC1とC2に分割されると、木の構造は
ABC1C2DA \to B \to C1 \to C2 \to D
となり、選択肢の中でイが正解となります。

参考文献

  • 『データベースシステム概論』(著:原顕三郎)
  • 『アルゴリズムとデータ構造』(著:小暮俊弘)

以上の理由で正解は となります。
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ