平成21年度 春期 午前Ⅱ 問6
データ操作
外部キーに関する問題
複数の事業部,部,課及び係のような組織階層の概念データモデルを,第 3 正規形の表,
組織(組織ID,組織名,…)
として実装した。組織の親子関係を表示する SQL 文中の a に入れるべき適切な字句はどれか。ここで,“組織”表記述中の下線部は,主キーを表し,追加の属性を想定する必要がある。また,モデルの記法として UML を用いる。{階層}は組織の親子関係が循環しないことを指示する制約記述である。
概念データモデル:
クラス 組織(属性:組織名,…)
組織から組織自身への関連(自己関連)
子組織 側の多重度 *
親組織 側の多重度 0..1
関連に制約 {階層} を付記
SELECT 組織1.組織名 AS 親組織,組織2.組織名 AS 子組織
FROM 組織 AS 組織1,組織 AS 組織2
WHERE [ a ]- ア組織1.親組織ID = 組織2.子組織ID
- イ組織1.親組織ID = 組織2.組織ID
- ウ組織1.組織ID = 組織2.親組織ID
- エ組織1.組織ID = 組織2.子組織ID
答えと解説を見る
✓ これが正解ウ組織1.組織ID = 組織2.親組織ID
解説
子の行が持つ親組織ID を、親の行の組織ID と結び付けます。
UML の図では、子組織の側の多重度が*、親組織の側が 0..1 です。一つの組織に親は高々一つなので、第 3 正規形の“組織”表には、各行に自分の親を指す親組織ID を外部キーとして持たせるのが自然な実装です。子は複数あり得るので、子組織ID という列を一つの行に持たせることはできません。SQL では組織1 を親、組織2 を子として出力しているので、子の行の親組織ID が親の行の組織ID と一致する組を結べばよく、条件は 組織1.組織ID = 組織2.親組織ID となります。同じ表を二つの別名で結ぶときは、別名ごとの役割を SELECT 句の見出しから読み取ってから条件を組むと取り違えません。
ほかの選択肢はなぜ違うのか
- ア組織1.親組織ID = 組織2.子組織I…:子組織ID という列を前提にしていますが、一つの組織には子が複数あり得るので、1 行に一つの値しか入らない列では表せません。“組織”表に追加すべき属性は親を指す列であり、この条件は成り立ちません。
- イ組織1.親組織ID = 組織2.組織ID:列の対応の形は正しいものの、組織1 の親が組織2 になる向きで結んでいます。SELECT 句では組織1 を親組織、組織2 を子組織として出力しているので、この条件では見出しと中身が逆になります。
- エ組織1.組織ID = 組織2.子組織ID:子組織ID という列を使っており、一つの行に子を一つしか書けない構造を前提にしています。親を持つ側に親組織ID を置くのが多重度 0..1 の実装であり、子組織ID は表に存在しない列です。
この問題の用語
- 組織目的を果たすために、人が役割を分けて集まったまとまりのことです。分け方には機能別、事業部制、マトリックスなどの形があります。
出典:平成21年度 春期 データベーススペシャリスト試験 午前Ⅱ 問6
同じ用語が出る問題
- 令和6年度 秋期 午前Ⅱ 問6:クラス図に関する問題(組織)
- 令和4年度 秋期 午前Ⅱ 問23:アクセス透過性の説明(組織)
- 令和3年度 秋期 午前Ⅱ 問2:UMLに関する問題(組織)
- 平成31年度 春期 午前Ⅱ 問3:UMLに関する問題(組織)
- 平成29年度 春期 午前Ⅱ 問20:CSIRTの説明(組織)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)