データベーススペシャリスト試験 2009年 午前206


複数の事業部, 部, 課及び係のような組織階層の概念データモデルを, 第3正規形の表,
  組織(組織ID, 組織名, …) として実装した。組織の親子関係を表示するSQL文中のaに入れるべき適切な字句はどれか。ここで、“組織”表記述中の下線部は、主キーを表し、追加の属性を想定する必要がある。また,モデルの記法としてUMILを用いる。{階層}は組織の親子関係が循環しないことを指示する制約記述である。
問題画像
組織1.親組織ID = 組織2.子組織ID
組織1.親組織ID = 組織2.組織ID
組織1.組織ID = 組織2.親組織ID(正解)
組織1.組織ID = 組織2.子組織ID

解説

組織の親子関係を表示するSQL文の適切な結合条件【午前2 解説】

要点まとめ

  • 結論:親組織の組織IDと子組織の親組織IDを結合条件に指定するのが正解です。
  • 根拠:親子関係は子組織の親組織IDが親組織の組織IDを参照する外部キーとして表現されるためです。
  • 差がつくポイント:親子関係の表現方法を正しく理解し、どちらのテーブルのどのカラムを結合するかを見極めることが重要です。

正解の理由

正解はウ: 組織1.組織ID = 組織2.親組織IDです。
「組織」テーブルは自己結合で親子関係を表現しています。親組織の組織ID(組織1.組織ID)が、子組織の親組織ID(組織2.親組織ID)に対応するため、この条件で親子の組織名を正しく結びつけられます。

よくある誤解

親組織IDと組織IDの役割を混同し、逆方向に結合条件を設定してしまうことが多いです。
また、子組織IDという属性は存在しないため、それを使った結合は誤りです。

解法ステップ

  1. 組織テーブルの主キーは「組織ID」であることを確認する。
  2. 親子関係は「親組織ID」という外部キーで表されていることを理解する。
  3. SQLの自己結合で、親組織の組織IDと子組織の親組織IDを結合条件に指定する。
  4. 選択肢の中から「組織1.組織ID = 組織2.親組織ID」を選ぶ。

選択肢別の誤答解説

  • ア: 組織1.親組織ID = 組織2.子組織ID
    →「子組織ID」という属性は存在しないため誤り。
  • イ: 組織1.親組織ID = 組織2.組織ID
    →親組織IDは子組織側の属性であり、親組織のIDと結合すべき。逆方向の結合で意味が合わない。
  • ウ: 組織1.組織ID = 組織2.親組織ID
    →正解。親組織のIDと子組織の親組織IDを結合している。
  • エ: 組織1.組織ID = 組織2.子組織ID
    →「子組織ID」という属性は存在しないため誤り。

補足コラム

自己結合は同じテーブルを複数回参照し、階層構造や親子関係を表現する際に有効です。
この問題のように組織階層を扱う場合、親組織IDがNULLの場合は最上位組織を示し、階層の循環を防ぐ制約({階層})も重要です。

FAQ

Q: なぜ親組織IDは子組織の属性なのですか?
A: 親組織IDは子組織がどの組織の子であるかを示す外部キーで、子組織側に持たせることで階層構造を表現します。
Q: 自己結合の際、テーブルに別名をつける理由は?
A: 同じテーブルを複数回参照するため、区別するために別名(エイリアス)をつけて扱いやすくします。

関連キーワード: 自己結合, 階層構造, 外部キー, 組織階層, SQL JOIN, 第3正規形
← 前の問題へ次の問題へ →

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