平成25年度春期 応用情報技術者試験 午前 問28
“プログラマは全て社員であり,社員の約10%を占める。社員は社員番号と氏名をもち,職種がプログラマである場合は,使用できるプログラム言語を一つ以上もつ。”という状況を記録するデータベース設計案として,適切なものはどれか。ここで,実線の下線は主キーを,破線の下線は外部キーを表す。

※選択肢ア〜エは上の図表内に記載されています。
解答・解説を見る
正解:エ
AI解説
正解はエ。プログラマは社員の一部(約10%)なので、社員表とは別にプログラマ表を設け、プログラマ表の主キー(社員番号)を社員表への外部キーとするのが適切である。さらに、プログラマは言語を「一つ以上」もつ多値属性なので、社員番号と言語の組を主キーとする別表に分離する。1つの列に複数の値を持たせない(第1正規形)ことと、部分集合は外部キーで参照することが判断基準である。 ア: 誤り。全社員の表に言語列を持たせると、社員の約90%を占める非プログラマで言語列が空(NULL)になり、また複数言語を1列で表せない。 イ: 誤り。言語を1つの列に持つ設計では「一つ以上」の複数言語を表現できず、繰返し属性が残る。 ウ: 誤り。プログラマ表に言語列を直接持たせると、複数言語をもつプログラマの表現に繰返しが生じ、正規化されていない。 エ: 正しい。社員表、プログラマ表(社員番号が主キーかつ社員表への外部キー)、プログラマの言語表(社員番号+言語が主キー)に分ける設計で、複数言語もNULLの発生も適切に扱える。 💡 「一部の実体だけがもつ属性は別表に」「1対多・多値属性は主キーに組み込んだ別表に」が正規化設計の鉄則。『一つ以上もつ』という表現は多値属性のサインである。
※Web掲載用に表記を一部変更しています。図表はIPA公式問題冊子から引用しています。著作権はIPAに帰属します。