応用情報技術者 2020年 秋期 午前2 問27
問題文
UML を用いて表した図のデータモデルから、“部品” 表、“納入”表及び “メーカ” 表を関係データベース上に定義するときの解釈のうち、適切なものはどれか。

選択肢
ア:同一の部品を同一のメーカから複数回納入することは許されない。
イ:“納入”表に外部キーは必要ない。
ウ:部品番号とメーカ番号の組みを “納入” 表の候補キーの一部にできる。(正解)
エ:“メーカ”表は、外部キーとして部品番号をもつことになる。
🔒 解説は解答すると表示されます
多対一関係の外部キー【午前2解説】
正解の理由
図の多重度は「部品 1 — * 納入 * — 1 メーカ」を示しており、各納入レコードは必ず1つの部品と必ず1つのメーカーに対応します(すなわち納入レコードは必ず1つの部品に紐づく)。したがって、関係データベースにおける“納入”表は親側(部品、メーカー)の主キーを外部キーとして持ちます。その上で、部品番号とメーカー番号の組み合わせは「納入」表の候補キーの構成要素になり得ます。たとえば候補キーを (部品番号, メーカー番号, 納入日) や (部品番号, メーカー番号, 納入連番) のように定義すれば、部品番号+メーカー番号の組はその候補キーの一部になります。したがって選択肢の ウ が正しいです。
解法ステップ
- UML の多重度を読み取る:部品側に「1」、納入側に「」→ 納入は必ず1つの部品に属し、1つの部品は複数回納入され得る。納入側に「」、メーカー側に「1」→ 納入は必ず1つのメーカーに属する。
- 関係モデルへの変換ルールを適用:多(子)側の表(ここでは納入)に親(部品、メーカー)の主キーを外部キーとして持たせる。
- 候補キーの検討:納入テーブルの一意性を保証するキーを決める。部品番号+メーカー番号だけでは日付や回数が同一の場合に重複する可能性があるため、通常は他の属性(納入日や納入ID)を含めて候補キーを構成する。だが部品番号+メーカー番号はその候補キーの一部に含められる。
選択肢別の誤答解説
-
ア: 「同一の部品を同一のメーカから複数回納入することは許されない。」
- 誤り。多重度が部品側1・納入側*、および納入側*・メーカー側1であるため、同一部品を同一メーカーから複数回納入する(納入日や数量が異なる複数レコード)が許されます。
-
イ: 「“納入”表に外部キーは必要ない。」
- 誤り。納入は部品およびメーカーのそれぞれ1つに紐づくので、納入表には部品表およびメーカー表の主キーを参照する外部キーが必要です。外部キーは参照整合性を保証します。
-
ウ: 「部品番号とメーカ番号の組みを “納入” 表の候補キーの一部にできる。」
- 正しい。部品番号+メーカー番号だけで一意とならない可能性があるためそれ単独で候補キーと断定はできないが、候補キー(例:部品番号, メーカ番号, 納入日)の構成要素として含めることは可能です。
-
エ: 「“メーカ”表は、外部キーとして部品番号をもつことになる。」
- 誤り。関係の向き(多側が納入)から、外部キーは多側(納入)に置かれるのが普通であり、メーカー表が部品番号を持つ必要はありません。メーカーは親エンティティであり部品に依存しません。
よくある誤解
- 多重度の読み違い:線の近くにある数字がどちらのエンドに対応するかを逆に解釈してしまい、親子関係(どちらがFKを持つか)を間違える。図の端に近い数字がその端の多重度であることを確認する習慣をつける。
- 「親の複合キー=必ず候補キー」と考える誤り:親側キーの組合せが子テーブルで一意になるとは限らない(例:同一部品・同一メーカーで複数回納入があり得る)。業務ルールや納入日・番号などを考慮して候補キーを決める必要がある。
- 外部キーの配置を逆に想定:多対一では外部キーは多側に置く。1側に外部キーを置くのは1対多を逆手に取った設計ミスになる。
補足コラム
- 候補キーと主キー:候補キーは「一意性を満たす可能性のあるキー」の集合で、その中から運用上選んだものが主キー(PK)になります。納入のように複数の同一組合せがあり得る場合、業務要件に応じて「納入ID(サロゲートキー)」を導入して単純に主キーとすることが多いです。
- 正規化の観点:納入が部品とメーカーを参照する設計は第三正規形(3NF)に適合しやすい。多対多関係がある場合は中間テーブル(納入がまさにその例に一部該当し得る)が必要になりますが、今回の図は中間テーブルというより「事象(納入)」を表す独立エンティティです。
FAQ
Q1: 部品番号+メーカー番号だけを候補キーにしてよい場合はあるか?
A1: 可能だが業務ルール次第です。例えば同一部品を同一メーカーから永続的に1回だけしか納入しないという明確な制約が業務仕様で定められていれば組合せが一意になります。通常は納入日は可変要素なので追加属性を含めた候補キーやサロゲートキーの採用が安全です。
A1: 可能だが業務ルール次第です。例えば同一部品を同一メーカーから永続的に1回だけしか納入しないという明確な制約が業務仕様で定められていれば組合せが一意になります。通常は納入日は可変要素なので追加属性を含めた候補キーやサロゲートキーの採用が安全です。
Q2: 外部キーはNULLを許すべきか?
A2: 図の多重度が必須(1)であればNULLは許しません。今回の図では納入は必ず部品とメーカーに紐づくため、外部キーはNOT NULL にするのが妥当です。
A2: 図の多重度が必須(1)であればNULLは許しません。今回の図では納入は必ず部品とメーカーに紐づくため、外部キーはNOT NULL にするのが妥当です。
Q3: 多対多の関係の場合、外部キーはどう配置するか?
A3: 多対多は直接外部キーを置くのではなく、中間テーブル(リレーションテーブル)を設け、そのテーブルが両親の主キーを外部キーとして持ちます。今回の納入は「事象」を表す中間的役割を果たすため、納入テーブル自体が親両者を参照する形です。
A3: 多対多は直接外部キーを置くのではなく、中間テーブル(リレーションテーブル)を設け、そのテーブルが両親の主キーを外部キーとして持ちます。今回の納入は「事象」を表す中間的役割を果たすため、納入テーブル自体が親両者を参照する形です。
関連キーワード: UML、多重度、外部キー、候補キー、正規化、リレーショナル設計

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

