出典:平成30年度 ITパスポート試験(IP) 春期分 問81
予備知識
| 用語 | 意味 |
|---|---|
| データベース | データを入れておく箱 |
| 関係データベース | データを表形式で扱っていて、表同士をくっつけたりなんだりできるデータベース。OracleとかMySQLとかのこと |
| 正規化 | データとかを使いやすいように整理したり変形したりすること |
| 主キー | データベースのデータを一意に識別するための項目 |
問題
| 問題文 |
|---|
| 顧客名と住所,商品名と単価,顧客が注文した商品の個数と注文した日付を関係データベースで管理したい。正規化された表として,適切なものはどれか。ここで,下線は主キーを表し,顧客名や商品名には,それぞれ同一のものがあるとする。 |
| ピヨ意訳:以下の3つの情報をデータベースで管理するよ。 1.顧客の情報:「顧客名」と「住所」 2.商品の情報:「商品名」と「単価」 3.注文の情報:「顧客が注文した商品の個数」「注文した日付」 一番、過不足がない構成になっている選択肢は、どれ? なお、下線が付いている項目は主キーだよ。あと、顧客名や商品名の項目には重複(名前は同じだけど実際には別のやつ)があるよ。 |
| 解答選択肢 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ア | 顧客
商品
注文
| |||||||||||
| ピヨ意訳:- | ||||||||||||
| イ | 顧客
商品
注文
| |||||||||||
| ピヨ意訳:- | ||||||||||||
| ウ | 顧客
注文
| |||||||||||
| ピヨ意訳:- | ||||||||||||
| エ | 商品
注文
| |||||||||||
| ピヨ意訳:- | ||||||||||||

正解
| 正解 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ア | 顧客
商品
注文
| |||||||||||
| ピヨ意訳:- | ||||||||||||
ピヨピヨ解説
データベース設計の話ですね。
管理したい情報は
1.顧客の情報
2.商品の情報
3.注文の情報
です。
それぞれの情報で管理したい項目は
1.顧客の情報
(1) 顧客名
(2) 住所
2.商品の情報
(1) 商品名
(2) 単価
3.注文の情報
(1) 顧客が注文した商品の個数
(2) 注文した日付
です。
ここで「3.注文の情報」の「(1) 顧客が注文した商品の個数」に注目してください。
これは
i. 誰が買ったのか
ii. 何を買ったのか
iii.何個買ったのか
の3つの情報が合体した姿です。
バラすと
1.顧客の情報
(1) 顧客名
(2) 住所
2.商品の情報
(1) 商品名
(2) 単価
3.注文の情報
(1) 注文した顧客の情報
(2) 注文した商品の情報
(3) 注文した商品の個数
(4) 注文した日付
になります。
ここまでバラすと、なんとなく「『ア』か『イ』が正解かな?」と分かりますよね。
ちなみに主キーになっている「○○番号」は行を特定するための番号です。
データに付けた会員番号とか背番号みたいなものだと思ってください。
さて、次に行きましょう。
「3.注文の情報」の「(1) 注文した顧客の情報」に注目してください。
顧客の情報自体は「1.顧客の情報」に保管してあります。
よって「3.注文の情報」には「『1.顧客の情報』の中にある、この人だよ」という情報があれば事足ります。
それでは、どの項目を使って「『1.顧客の情報』の中にある、この人だよ」を表現しましょうか?
答えを先に書くと「顧客番号」を使います。
「顧客名」は重複があるので使えません。
「顧客番号123の人から注文がありました!」と言われたら「あぁ、あの人か」と分かります。
顧客番号と顧客は1対1で結び付いているからです。
これが「佐藤さんから注文がありました!」だと「佐藤さんは2人いるけど、どっちの佐藤さん?」となる可能性がありますよね。
それと同じです。
ということで「ア」が正解です。
ちなみに「イ」だと、上でも書きましたが、注文情報から注文した顧客や商品が特定できません。
顧客名や商品名には重複があるからです。
「ウ」は同じ顧客が2回注文した時点で破たんします。
例えば、ピヨ太君が1/1と1/2に買ったとしましょう。
顧客情報は
1:ピヨ太:ピヨピヨ家:1/1
1:ピヨ太:ピヨピヨ家:1/2
のようになるはずですが顧客番号が主キーだから同じ値を入れられません。
「エ」は同じ商品が2回注文された時点で破たんします。
例えば、苺ショートを1/1に1個買い、1/2に2個買ったとしましょう。
商品情報は
1:苺ショート:300:1
1:苺ショート:300:2
のようになるはずですが商品番号が主キーだから同じ値を入れられません。






