平成31年度 春期 データベーススペシャリスト試験 午前Ⅱ 問3
テクノロジ/データベース部,課,係の階層関係から成る組織のデータモデルとして,モデルA~Cの三つの案が提出された。これらに対する解釈として,適切なものはどれか。組織階層における組織の位置を組織レベルと呼ぶ。組織間の階層関係は,親子として記述している。親と子は循環しないものとする。ここで,モデルの表記にはUMLを用い,{階層}は組織の親と子の関連が循環しないことを指定する制約記述である。

出典:平成31年度 春期 データベーススペシャリスト試験 午前Ⅱ 問3
- ア新しい組織レベルを設ける場合,どのモデルも変更する必要はない。
- イどのモデルも,一つの子組織が複数の親組織から管轄される状況を記述できない。
- ウモデルBを関係データベース上に実装する場合,親は子の組織コードを外部キーとする。
- エモデルCでは,組織の親子関係が循環しないように制約を課す必要がある。
正解:エ
解説
モデルAは部・課・係を別々のクラスとして固定的な階層で表現しているため,新しい組織レベル(例えば係の下の班など)を追加するにはモデル自体(クラス構成)を変更する必要があります。モデルBは組織を1つのクラスとし,親子関係を再帰的な関連(多重度0..1と*)として表現しているため,組織レベルが増えても構造の変更は不要です。モデルCは組織クラスと,親子の対応関係を表す組織構造クラス(連関クラス)に分けて表現しており,これもレベルの増減に対して構造変更が不要です。したがって,アの「どのモデルも変更する必要はない」は誤りです(モデルAは変更が必要)。モデルB・Cはいずれも1組織が複数の親をもつ多対多の階層は表現できない(親側の多重度が0..1や1に制限されている)ため,イも誤りです。モデルBを関係データベースに実装する場合,1(親)対多(子)の関係になるので,外部キーは「多」側であるBの組織表自身に,親の組織コードを外部キーとして追加する形になります(子が親の組織コードをもつ)ため,ウの「親は子の組織コードを外部キーとする」という記述は逆であり誤りです。モデルCでは,組織構造表の親組織コード・子組織コードの組合せに対して,親子関係が循環しない(同じ組織が自分の祖先にならない)ようにする制約は,リレーショナルモデルの構造だけでは保証できず,アプリケーションや追加の制約によって担保する必要があります。したがって,エの「モデルCでは,組織の親子関係が循環しないように制約を課す必要がある」が適切です。
選択肢ごとの解説
- ア誤り。モデルAは部・課・係をそれぞれ独立したクラスとして固定的に表現しているため,新しい組織レベルを追加するにはクラス構成自体を変更する必要があります。
- イ誤り。モデルB・Cはいずれも親側の多重度が0..1又は1に制限されており,1つの子組織が複数の親組織から管轄される状況(多対多の階層)は表現できません。
- ウ誤り。モデルBを関係データベースに実装する場合,1(親)対多(子)の関係になるため,外部キーは「多」側である組織表自身に親の組織コードを追加する形になります。「親は子の組織コードを外部キーとする」という記述は方向が逆です。
- エ正しい。モデルCの組織構造表は親組織コードと子組織コードの組を保持するだけの構造であり,それ自体では親子関係が循環しないことを保証できないため,循環を防ぐための制約を別途課す必要があります。