受注明細表に「受注番号、明細番号、顧客番号、顧客住所、商品番号、数量」を保存している。主キーは受注番号と明細番号の組合せで、同じ顧客番号の現在住所は常に一つとする。顧客が転居したとき一部の行だけを直したため、同じ顧客番号に異なる現在住所が残った。この更新時異常を直接減らす設計はどれか。過去の配送先履歴は別途保存する。
本サイトで独自に作成。IPAの試験問題からの転載ではありません。
公開日:
選択肢を選んで、答え合わせをしましょう。
回答せずに正解・解説を確認する
正解:イ 顧客番号を主キーとする顧客表へ現在住所を分離し、受注明細から顧客番号で参照する
この表示だけでは、回答数や正答率は変わりません。
解説
この設問では、現在住所は顧客番号によって決まります。各明細に同じ住所を繰り返すと、住所変更を複数行へ反映する必要があり、更新漏れで食い違いが起きます。現在住所を顧客表で一か所に管理し、顧客番号を参照すれば、この重複更新を減らせます。
主キーを広げても住所の重複保存は残り、変更箇所が一つになるわけではありません。
顧客番号から一意に決まる現在住所を顧客表へ分離するので、同一事実の重複更新を減らせます。
住所という必要な情報そのものを失う方法であり、業務要件を保った設計になりません。
明細番号の型を変えても、顧客住所の重複と更新漏れは解決しません。
関連知識
正規化では、どの属性が何によって決まるかを整理します。ただし現在住所と注文時点の配送先は異なる事実です。注文後に顧客表の住所が変わっても、過去の配送先が書き換わらないよう履歴の要件を分けて設計します。
間違えやすいポイント
同じ文字列は何でも一か所へまとめる、と考えないこと。現在値と履歴では保持したい意味が違います。この設問は「現在住所が一つ」という前提で判断します。
覚え方
一つの事実は一か所へ。現在値と履歴は分けて考える。
実務での意味
顧客マスタの住所変更時に過去の帳票が変わらないかを確かめ、マスタ参照と取引時点の保存値を使い分けます。
解説:本サイト編集部によるオリジナル文章