応用情報技術者 2013年 春期 午前2 問28
問題文
“プログラマは全て社員であり、社員の約10%を占める。社員は社員番号と氏名をもち、職種がプログラマである場合は、使用できるプログラム言語を一つ以上もつ。”という状況を記録するデータベース設計案として、適切なものはどれか。ここで、実線の下線は主キーを、破線の下線は外部キーを表す。
選択肢
ア:社員(社員番号、 氏名、 職種、 プログラム言語)
イ:社員(社員番号、 氏名、 プログラム言語)
ウ:社員(社員番号、 氏名)
プログラマ(社員番号、 プログラム言語)
エ:社員(社員番号、 氏名)
プログラマ(社員番号、 プログラム言語)(正解)
データベース設計案の適切な選択【午前2 解説】
要点まとめ
- 結論:正解はエの「社員」と「プログラマ」を分けて設計し、プログラマのプログラム言語を別テーブルで管理する方法です。
- 根拠:社員全体の中でプログラマは約10%と少数派であり、プログラマ特有の属性(プログラム言語)は別管理が正規化の観点から適切です。
- 差がつくポイント:プログラマの言語が複数可能な点を考慮し、1対多の関係を表現できる外部キー設計ができているかが重要です。
正解の理由
エの設計は社員テーブルに社員番号と氏名を持たせ、プログラマテーブルで社員番号(外部キー)とプログラム言語(主キー)を管理しています。
これにより、社員全体の情報とプログラマ特有の情報を分離し、プログラマが複数の言語を持つ場合も柔軟に対応可能です。
また、プログラマは社員の一部であるため、社員番号を外部キーとして参照し整合性を保っています。
これにより、社員全体の情報とプログラマ特有の情報を分離し、プログラマが複数の言語を持つ場合も柔軟に対応可能です。
また、プログラマは社員の一部であるため、社員番号を外部キーとして参照し整合性を保っています。
よくある誤解
社員テーブルにプログラム言語を直接持たせると、プログラマ以外の社員に無駄なカラムができたり、複数言語の管理が困難になります。
また、職種を含めて一つのテーブルにまとめると正規化が不十分で更新異常が起きやすくなります。
また、職種を含めて一つのテーブルにまとめると正規化が不十分で更新異常が起きやすくなります。
解法ステップ
- 問題文から「社員は全員共通の属性(社員番号、氏名)を持つ」と理解する。
- 「プログラマは社員の約10%で、プログラム言語を1つ以上持つ」ことから、プログラマは社員の部分集合であると認識。
- プログラマの言語は複数可能なので、1対多の関係を表現できる設計が必要と判断。
- 社員テーブルとプログラマテーブルを分け、プログラマテーブルに社員番号(外部キー)とプログラム言語(主キー)を持たせる設計を選択。
- 選択肢の中でこの条件を満たすのはエのみであると確認。
選択肢別の誤答解説
- ア:社員テーブルに職種とプログラム言語をまとめているが、プログラマ以外の社員にも言語カラムが存在し冗長。複数言語の管理も困難。
- イ:プログラム言語を社員テーブルに持たせているため、プログラマ以外の社員に無駄な情報が入り、複数言語の対応もできない。
- ウ:社員とプログラマを分けているが、プログラマテーブルのプログラム言語が外部キーになっておらず、言語の一意性や複数管理が不明確。
- エ:社員とプログラマを分離し、プログラマテーブルのプログラム言語を主キーにして複数言語を管理可能。正規化も適切。
補足コラム
データベース設計では「正規化」が重要です。正規化とはデータの重複や矛盾を防ぐために、関連する情報を適切に分割することです。
今回の問題では、社員全体の情報とプログラマ特有の情報を分けることで、更新時の異常や無駄なデータを防いでいます。
また、1対多の関係を表現するために、プログラマテーブルの主キーにプログラム言語を含める設計がポイントです。
今回の問題では、社員全体の情報とプログラマ特有の情報を分けることで、更新時の異常や無駄なデータを防いでいます。
また、1対多の関係を表現するために、プログラマテーブルの主キーにプログラム言語を含める設計がポイントです。
FAQ
Q: なぜプログラマの言語を社員テーブルに入れてはいけないのですか?
A: プログラマ以外の社員には不要な情報となり、複数言語を持つ場合にカラムが増えたり、データの重複や更新異常が発生しやすくなるためです。
A: プログラマ以外の社員には不要な情報となり、複数言語を持つ場合にカラムが増えたり、データの重複や更新異常が発生しやすくなるためです。
Q: 外部キーとは何ですか?
A: 外部キーは他のテーブルの主キーを参照するキーで、テーブル間の関連性を保ち、データの整合性を確保します。
A: 外部キーは他のテーブルの主キーを参照するキーで、テーブル間の関連性を保ち、データの整合性を確保します。
Q: 1対多の関係を表現するにはどうすればよいですか?
A: 多側のテーブルに1側の主キーを外部キーとして持たせ、必要に応じて複数のレコードを登録できるようにします。
A: 多側のテーブルに1側の主キーを外部キーとして持たせ、必要に応じて複数のレコードを登録できるようにします。
関連キーワード: 正規化、外部キー、主キー、1対多関係、データベース設計、ER図、属性分割

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

