ホーム > データベーススペシャリスト試験 > 2009年
データベーススペシャリスト試験 2009年 午前2 問06
複数の事業部, 部, 課及び係のような組織階層の概念データモデルを, 第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(組織1.組織ID)が、子組織の親組織ID(組織2.親組織ID)に対応するため、この条件で親子の組織名を正しく結びつけられます。
よくある誤解
親組織IDと組織IDの役割を混同し、逆方向に結合条件を設定してしまうことが多いです。
また、子組織IDという属性は存在しないため、それを使った結合は誤りです。
また、子組織IDという属性は存在しないため、それを使った結合は誤りです。
解法ステップ
- 組織テーブルの主キーは「組織ID」であることを確認する。
- 親子関係は「親組織ID」という外部キーで表されていることを理解する。
- SQLの自己結合で、親組織の組織IDと子組織の親組織IDを結合条件に指定する。
- 選択肢の中から「組織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の場合は最上位組織を示し、階層の循環を防ぐ制約({階層})も重要です。
この問題のように組織階層を扱う場合、親組織IDがNULLの場合は最上位組織を示し、階層の循環を防ぐ制約({階層})も重要です。
FAQ
Q: なぜ親組織IDは子組織の属性なのですか?
A: 親組織IDは子組織がどの組織の子であるかを示す外部キーで、子組織側に持たせることで階層構造を表現します。
A: 親組織IDは子組織がどの組織の子であるかを示す外部キーで、子組織側に持たせることで階層構造を表現します。
Q: 自己結合の際、テーブルに別名をつける理由は?
A: 同じテーブルを複数回参照するため、区別するために別名(エイリアス)をつけて扱いやすくします。
A: 同じテーブルを複数回参照するため、区別するために別名(エイリアス)をつけて扱いやすくします。
関連キーワード: 自己結合, 階層構造, 外部キー, 組織階層, SQL JOIN, 第3正規形