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

ア:新しい組織レベルを設ける場合、どのモデルも変更する必要はない。
イ:どのモデルも, 一つの子組織が複数の親組織から管轄される状況を記述できない。
ウ:モデルBを関係データベース上に実装する場合, 子の組織コードを外部キーとする。
エ:モデルCでは, 組織の親子関係が循環しないように制約を課す必要がある。(正解)
解説
組織階層データモデルの解釈【午前2 解説】
要点まとめ
- 結論:モデルCでは組織の親子関係が循環しないように制約を設ける必要がある。
- 根拠:モデルCは親子関係を別エンティティで管理し、循環制約が明示されていないため、無限ループを防ぐ制約が必須。
- 差がつくポイント:循環制約の理解と、モデルごとの親子関係の表現方法の違いを正確に把握することが重要。
正解の理由
モデルCは「組織」と「組織構造」という2つのエンティティで親子関係を管理し、親組織コードと子組織コードを属性として持つため、親子関係の循環が起こる可能性があります。したがって、組織階層の整合性を保つために、循環しないことを保証する制約を設ける必要があります。これが選択肢エの正しさの根拠です。
よくある誤解
モデルBの自己参照で循環制約が明示されているため、モデルCも同様に自動的に循環しないと誤解しがちです。実際にはモデルCでは明示的な制約が必要です。
解法ステップ
- 各モデルの親子関係の表現方法を確認する。
- 循環制約の有無をモデルごとに検討する。
- モデルCの親子関係が別エンティティで管理されている点に注目する。
- 循環制約がない場合、無限ループや不整合が発生する可能性を理解する。
- 選択肢の記述と照合し、最も適切なものを選ぶ。
選択肢別の誤答解説
- ア: 新しい組織レベルを設ける場合、モデルAはエンティティ追加が必要であり、全モデルが変更不要とは言えない。
- イ: モデルBは自己参照で親子関係を表現し、複数親の管轄は制約次第だが、一般的に多重親を許さない設計が多い。
- ウ: モデルBの自己参照では親組織コードを外部キーにするのが正しく、子の組織コードを外部キーにするのは誤り。
- エ: モデルCは親子関係の循環を防ぐ制約が必要であり、これが正解。
補足コラム
組織階層のデータモデルでは、親子関係の循環を防ぐことが非常に重要です。循環があると、階層構造の探索や集計処理が無限ループに陥るため、UMLの制約記述やデータベースのトリガー・チェック制約で防止します。モデルBのように自己参照で表現する場合は、{階層}制約で循環禁止を明示します。モデルCのように別エンティティで管理する場合は、制約を設ける設計が必須です。
FAQ
Q: モデルAは新しい組織レベルを追加しても変更不要ですか?
A: いいえ、モデルAは部・課・係のエンティティが固定されているため、新レベル追加時はエンティティや関連の追加が必要です。
A: いいえ、モデルAは部・課・係のエンティティが固定されているため、新レベル追加時はエンティティや関連の追加が必要です。
Q: モデルBの自己参照で複数親を持つことは可能ですか?
A: カーディナリティ「0..1」が親側にあるため、基本的には一つの親組織のみを持つ設計です。
A: カーディナリティ「0..1」が親側にあるため、基本的には一つの親組織のみを持つ設計です。
Q: 循環制約はどのように実装できますか?
A: データベースではトリガーや再帰クエリでチェックし、UMLでは{階層}制約で表現します。
A: データベースではトリガーや再帰クエリでチェックし、UMLでは{階層}制約で表現します。
関連キーワード: 組織階層モデル, UML制約, 親子関係循環, データモデル設計, 階層構造制約