平成31年度 春期 午前Ⅱ 問3
データベース設計
UMLに関する問題
部,課,係の階層関係から成る組織のデータモデルとして,モデルA~Cの三つの案が提出された。これらに対する解釈として,適切なものはどれか。組織階層における組織の位置を組織レベルと呼ぶ。組織間の階層関係は,親子として記述している。親と子は循環しないものとする。ここで,モデルの表記にはUMLを用い,{階層}は組織の親と子の関連が循環しないことを指定する制約記述である。
モデルA~C:
モデルA
クラス「部」(属性:部コード)
クラス「課」(属性:課コード)
クラス「係」(属性:係コード)
部 1 ―――― * 課 (部側のロール名:親,課側のロール名:子)
課 1 ―――― * 係 (課側のロール名:親,係側のロール名:子)
モデルB
クラス「組織」(属性:組織コード,組織レベル)
組織から組織自身への関連(一方の端:ロール名 親・多重度 0..1,他方の端:ロール名 子・多重度 *)
この関連に制約 {階層}
モデルC
クラス「組織」(属性:組織コード,組織レベル)
クラス「組織構造」(属性:親組織コード,子組織コード)
組織 1 ―――― * 組織構造 (組織側のロール名:親)
組織 1 ―――― * 組織構造 (組織側のロール名:子)- ア新しい組織レベルを設ける場合,どのモデルも変更する必要はない。
- イどのモデルも,一つの子組織が複数の親組織から管轄される状況を記述できない。
- ウモデルBを関係データベース上に実装する場合,親は子の組織コードを外部キーとする。
- エモデルCでは,組織の親子関係が循環しないように制約を課す必要がある。
答えと解説を見る
✓ これが正解エモデルCでは,組織の親子関係が循環しないように制約を課す必要がある。
解説
親子を組で記録するモデルCには、循環を防ぐ制約を別に課す必要があります。
三つのモデルが、親子関係をどこで表しているかを軸に比べます。モデルCでは、組織どうしの親子を組織構造というクラスに、親組織コードと子組織コードの組として記録します。この形はどの組織とどの組織でも組にできるので、子をたどっていくと自分に戻ってくるような組合せも記録できてしまいます。モデルBでは親子の関連に{階層}の制約が付いていて循環しないことが指定されていますが、モデルCにはその指定がありません。そのため、モデルCでは循環を防ぐ制約を別に課す必要があります。親子を別のクラスで組として持つ設計は柔軟な反面、関連そのものに付けていた制約を自分で補わなければならない、と押さえておくと判断しやすくなります。
ほかの選択肢はなぜ違うのか
- ア新しい組織レベルを設ける場合,どのモデル…:モデルAは部・課・係を別々のクラスとして持っているので、新しい組織レベルを設けるにはクラスと関連を追加しなければなりません。変更が要らないのは、組織レベルを属性として持つモデルBとモデルCだけです。
- イどのモデルも,一つの子組織が複数の親組織…:モデルCの組織構造は、一つの子組織コードに対して異なる親組織コードの組を何件でも持てるので、複数の親から管轄される状況を記述できます。親の多重度が1のモデルAや0..1のモデルBとは事情が違います。
- ウモデルBを関係データベース上に実装する場…:モデルBでは親の側の多重度が0..1、子の側が*です。関係データベースでは多の側に外部キーを置くので、子の行が親の組織コードを外部キーとして持ちます。親が子の組織コードを持つ形では、子が複数あるときに表せません。
この問題の用語
- 組織目的を果たすために、人が役割を分けて集まったまとまりのことです。分け方には機能別、事業部制、マトリックスなどの形があります。
- 関係データベースデータを表の形で持ち、表どうしを結びつけて扱う、最も広く使われているデータベース。データの定義や操作にはSQLを使います。
出典:平成31年度 春期 データベーススペシャリスト試験 午前Ⅱ 問3
同じ用語が出る問題
- 令和7年度 秋期 午前Ⅱ 問11:参照制約に関する問題(関係データベース)
- 令和6年度 秋期 午前Ⅱ 問6:クラス図に関する問題(組織)
- 令和6年度 秋期 午前Ⅱ 問5:主キーに関する問題(関係データベース)
- 令和4年度 秋期 午前Ⅱ 問23:アクセス透過性の説明(組織)
- 令和3年度 秋期 午前Ⅱ 問2:UMLに関する問題(組織)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)