IPA過去問ドリル

平成28年度 春期 データベーススペシャリスト試験 午前Ⅱ 問4

テクノロジ/データベース

部,課,係の階層関係から成る組織のデータモデルとして,モデルA~Cの三つの案が提出された。これらに対する解釈として,適切なものはどれか。組織階層における組織の位置を組織レベルと呼ぶ。組織間の相対関係は,親子として記述している。ここで,モデルの表記にはUMLを用いる。 〔モデルの概要〕 モデルA:部(部コード)と課(課コード)は,部側の多重度1(親),課側の多重度*(子)で関連付けられる。課(課コード)と係(係コード)も同様に,課側の多重度1(親),係側の多重度*(子)で関連付けられる。部・課・係をそれぞれ独立した実体として表現する。 モデルB:組織(組織コード,組織レベル)は自己再帰的な関連をもち,親側の多重度0..1,子側の多重度*で関連付けられる(一つの組織は親を高々一つもち,子を0以上もつ)。{階層}制約により,親子関係が循環しないことが指定されている。部・課・係を区別せず,組織レベル属性によって階層上の位置を表す。 モデルC:組織(組織コード,組織レベル)と組織構造(親組織コード,子組織コード)は,親側で組織1対組織構造*,子側でも組織1対組織構造*の二つの関連で結び付けられる(組織構造の親組織コードと子組織コードが,それぞれ組織を参照する外部キーとなる)。 (注:本サイトでは原問題の図を文字表記に変換しています)

出典:平成28年度 春期 データベーススペシャリスト試験 午前Ⅱ 問4

正解:エ

解説

モデルAは部・課・係を別々の実体として表現するため,新たな組織レベルを追加する際には実体と関連を新設する必要があります。モデルBは組織を自己再帰的な関連で表現し,親側の多重度0..1,子側の多重度*に加えて{階層}制約(循環禁止)が明示されています。モデルCは組織構造という関連実体(親組織コード,子組織コード)を介して組織同士を結び付ける設計であり,モデルBのような循環を禁止する制約が明示的に記述されていないため,親子関係が循環しないように別途制約を課す必要があります。

選択肢ごとの解説

  • 誤り。モデルAは部・課・係を別々の実体として固定的に表現しているため,新しい組織レベル(例えば係の下の階層)を追加するには実体と関連を新設するモデルの変更が必要です。「どのモデルも変更する必要がない」とは言えません。
  • 誤り。モデルCは組織構造という関連実体で親組織コードと子組織コードを別個に保持する構造であり,一意性を制限する記述がなければ同じ子組織コードが複数の親組織コードと組になり得るため,一つの子組織が複数の親組織から管轄される状況を記述できてしまいます。「どのモデルも記述できない」とは言えません。
  • 誤り。モデルBを関係データベースに実装する場合,一つの親に対して複数の子が対応する(多重度が子側で*)ため,外部キーは「多」側である子の行に「親の組織コード」を持たせる形になります。設問の「子の組織コードを外部キーとする」という記述は,どちらの組織コードを外部キーにするかが逆になっています。
  • 正しい。モデルBでは{階層}という制約が明示され循環が禁止されているのに対し,モデルCの組織構造(親組織コード,子組織コード)だけの定義では親子関係が循環しないことを保証する仕組みがないため,別途,循環しないような制約を課す必要があります。
データベーススペシャリストの過去問を演習モードで解く