多対多関連と複合主キーによるスキーマ設計

問題文の前提条件「プログラム言語を2種類以上使用できる従業員がいる(1人の従業員に対して複数のプログラム言語が対応)」「プログラム言語を全く使用できない従業員もいる」より、従業員とプログラム言語の間には多対多の関連が存在します。 したがって、“プログラム言語”表では1人の従業員(従業員番号)に対して複数行のプログラム言語が登録される可能性があり、また同一のプログラム言語が複数の従業員によって使用される可能性もあります。そのため、主キーは「従業員番号」と「プログラム言語」の両方を組み合わせた複合主キー( 従業員番号 , プログラム言語 )とする必要があります。選択肢エが適切です。 氏名は同姓同名が存在し得るため主キーに適さず、また1人が複数言語を扱う場合に一意性を保てません。 従業員番号のみを主キーとすると、1人の従業員が2種類以上の言語を使用する場合に主キーの一意性制約違反(重複)が発生して登録できません。 プログラム言語のみを主キーとすると、同一言語を複数の従業員が使用する場合に主キーの一意性制約違反が発生して登録できません。

従業員番号と氏名と使用できるプログラム言語を管理するために,“従業員”表及び“プログラム言語”表を設計する。“プログラム言語を 2 種類以上使用できる従業員がいる。プログラム言語を全く使用できない従業員もいる。”という状況を管理する“プログラム言語”表の設計として,適切なものはどれか。ここで,実線の下線は主キーを表す。

〔従業員表〕

従業員 (従業員番号, 氏名)

出典令和5年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問5
ア
プログラム言語 (<u>氏名</u>, プログラム言語)
イ
プログラム言語 (<u>従業員番号</u>, プログラム言語)
ウ
プログラム言語 (従業員番号, <u>プログラム言語</u>)
エ
プログラム言語 (<u>従業員番号</u>, <u>プログラム言語</u>)