平成25年度 春期 応用情報技術者試験 午前 問28
テクノロジ/データベース“プログラマは全て社員であり,社員の約10%を占める。社員は社員番号と氏名をもち,職種がプログラマである場合は,使用できるプログラム言語を一つ以上もつ。”という状況を記録するデータベース設計案として,適切なものはどれか。 (注:本サイトでは原問題の下線(主キー・外部キー)を注記で表しています)
出典:平成25年度 春期 応用情報技術者試験 午前 問28
- ア社員(社員番号,氏名,職種,プログラム言語) ※主キーは社員番号
- イ社員(社員番号,氏名,プログラム言語) ※主キーは社員番号
- ウ社員(社員番号,氏名) ※主キーは社員番号 プログラマ(社員番号,プログラム言語) ※社員番号は社員表への外部キー(主キーの指定なし)
- エ社員(社員番号,氏名) ※主キーは社員番号 プログラマ(社員番号,プログラム言語) ※主キーは{社員番号,プログラム言語},社員番号は社員表への外部キー
正解:エ
解説
プログラマは複数のプログラム言語を使用できるため,社員(社員番号,氏名)とプログラマ(社員番号,プログラム言語)に分割し,プログラマ表の主キーを{社員番号,プログラム言語}の組(社員番号は社員表への外部キー)とする設計が,1人が複数言語をもつ関係を正しく表現できます。
選択肢ごとの解説
- ア誤り。社員(社員番号,氏名,職種,プログラム言語)では,複数のプログラム言語をもつプログラマの行が主キー(社員番号)に対して重複してしまい,正しく表現できません。
- イ誤り。プログラム言語の列を社員表にそのまま加えると,1人が複数言語をもつ場合に主キーの一意性が保てなくなります。
- ウ誤り。プログラマ表の主キーが社員番号だけでは,1人のプログラマが複数のプログラム言語をもつ場合に行が一意に定まりません。
- エ正しい。プログラマ表の主キーを{社員番号,プログラム言語}とすることで,1人が複数の言語をもつ関係を過不足なく表現できます。