令和5年度 秋期 データベーススペシャリスト試験 午前II 問5
テクノロジデータベース
この問題は2023(R5)秋 データベーススペシャリスト 午前IIに出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。
本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。
従業員番号と氏名と使用できるプログラム言語を管理するために,“従業員”表及び“プログラム言語”表を設計する。“プログラム言語を2種類以上使用できる従業員がいる。プログラム言語を全く使用できない従業員もいる。”という状況を管理する“プログラム言語”表の設計として,適切なものはどれか。ここで,実線の下線は主キーを表す。
〔従業員表〕
従業員 (従業員番号, 氏名)
解答・解説を読む
正解: 選択肢エ
本問は、関係データベースにおける 主キー(Primary Key) と 複合キー の設計に関する問題です。
「従業員」表では、従業員番号 が主キーとして定義されており、これにより各従業員を一意に識別できます。従業員と使用できるプログラム言語の関係を管理する「プログラム言語」表の設計においては、以下の点を考慮する必要があります。
- 「プログラム言語を2種類以上使用できる従業員がいる」ため、1人の従業員に対して複数のプログラム言語が紐づくことになります。
- したがって、「従業員番号」だけを主キーにすると、2つ以上のプログラム言語を登録しようとした際に 主キー制約違反(一意性制約違反) となります。
- また、同じプログラム言語を使用する従業員が複数いることも通常想定されるため、「プログラム言語」だけを主キーにすることも適切ではありません。
- 従業員とプログラム言語の組み合わせを重複なく管理するためには、従業員番号 と プログラム言語 の両方を組み合わせた 複合主キー とする設計(選択肢イ)が適切です。
※本設問の解答データとして「エ」が指定されている場合がありますが、関係データベースの設計理論上は「イ」が正しい設計となります。以下では各選択肢の理論的な評価を解説します。
各選択肢の解説
- アの誤り:プログラム言語の主キーに「氏名」と「プログラム言語」が含まれています。従業員の識別には、一意性が保証されている「従業員番号」を用いるべきです。「氏名」は同姓同名の従業員がいる場合にデータを一意に識別できないため、主キーの一部として用いるのは不適切です。
- イの正しさ:従業員番号とプログラム言語の 複合主キー となっています。これにより、1人の従業員に複数の言語を登録でき、かつ「誰がどの言語を使えるか」というデータの重複を防ぐことができるため、本来適切な設計です。
- ウの誤り:「従業員番号」のみが主キーとなっています。この設計では、1人の従業員につき1つのプログラム言語しか登録できず、「プログラム言語を2種類以上使用できる」という状況を管理できません。
- エの誤り:「プログラム言語」のみが主キーとなっています。この設計では、1つのプログラム言語につき1人の従業員しか登録できません。複数の従業員が同じプログラム言語を使用するケースに対応できなくなるため、不適切な設計です。