データベース|平成29年度 春期 ITパスポート試験(特別措置試験) 問69
ある会社の社員の情報処理技術者試験の受験状況の一部を次に示す。この表を関係データベースで管理するために,二つの表に分割する方法として,適切なものはどれか。ここで,この会社には同姓同名の社員がいるものとする。
| 社員ID | 社員名 | 生年月日 | 試験種別 | 試験日 | 合否 |
|---|---|---|---|---|---|
| 0001 | 佐藤 花子 | 1985/4/29 | ITパスポート | 2013/4/21 | 合 |
| 0002 | 鈴木 一郎 | 1990/11/3 | 基本情報技術者 | 2013/4/21 | 否 |
| 0003 | 高橋 二郎 | 1992/2/11 | ITパスポート | 2013/4/21 | 否 |
| 0001 | 佐藤 花子 | 1985/4/29 | 基本情報技術者 | 2013/10/20 | 合 |
| 0003 | 高橋 二郎 | 1992/2/11 | ITパスポート | 2013/10/20 | 合 |
〔選択肢〕(原典では選択肢そのものが図=二つの表を横に並べ,項目名を枠で示したもの。左の表/右の表 の順に項目を書き起こしたもの)
- ✓ これが正解{社員ID|社員名|生年月日}/{社員ID|試験種別|試験日|合否}
- {社員ID|社員名|生年月日}/{社員名|試験種別|試験日|合否}
- {社員ID|社員名|生年月日|試験日}/{社員ID|社員名|試験種別|合否}
- {社員ID|生年月日|試験日}/{社員ID|社員名|試験種別|合否}
解説
繰り返し現れる内容を、別の表へ切り出して重複を消します。
元の表では、同じ人が二度受験すると、名前と生年月日が二行に重複して現れます。重複があると、直すときに片方だけ直して食い違う恐れがあります。そこで、人ごとに一度だけ決まる情報と、受験ごとに変わる情報を、別の表へ切り分けます。これが正規化の考え方です。人の表には社員IDと名前と生年月日を置き、受験の表には社員IDと試験種別と試験日と合否を置きます。二つの表は社員IDで結び直せるので、元の内容を失わずに復元できます。同姓同名がいるため、結び目には名前ではなく社員IDを使います。分けた後も、社員IDで突き合わせれば元の一覧を作り直せます。分けたことで情報が減ってはいけないので、これが確かめどころになります。人の表では社員IDが一人を指す鍵になり、受験の表では相手をたどるための印になります。
ほかの選択肢はなぜ違うのか
- 受験の表を社員名で結ぼうとしています。この会社には同姓同名の社員がいるため、名前だけでは誰の受験かを一つに絞れません。結び目の選び方が誤りです。つなぐ鍵は、一人を一つに定められる列である必要があります。
- 人の表に試験日が残っています。試験日は受験ごとに変わる情報なので、人ごとに一度だけ決まる表に置くと、また重複が生まれます。人の表が受験の回数だけ増えてしまうので、分ける前と同じ重複が残ります。切り分けの位置が誤りです。
- 人の表から社員名が抜け落ち、代わりに受験の表へ移っています。受験のたびに名前が繰り返されるので、切り分けた意味が失われます。さらに、人の表に名前が無いため、社員IDだけでは誰かが分かりません。二つの表のどちらも役目を果たせていません。
この問題に関係する言葉
- 正規化
- 主キー
- 関係データベースデータを表の形で持ち、表どうしを結びつけて扱う、最も広く使われているデータベース。設計に使うE-R図は、この形での実装を前提にしません。
- データベースたくさんのデータを決まった形で貯め、探したり書き換えたりできるようにした仕組み。多くの人が同時に使うことを前提にしています。
出典:平成29年度 春期 ITパスポート試験(特別措置試験) 問69
同じ単元をまとめて解くならデータベースへ。
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)