正解:ウ
各選択肢の解説
ア同じ値が何行にも入るため、更新時に一部だけ直して食い違いやすくなる。
誤り。これは正規化していない表で起こる問題です。正規化は同じ値を1か所にだけ 持つように表を分ける設計なので、この食い違いはむしろ防がれます。 正規化で「解消するもの」と「新たに生じるもの」を取り違えないようにします。
イ表を分けたことで、どの受注がどの顧客のものかという対応が失われる。
誤り。表を分けるとつながりが切れると思われがちですが、受注の表に顧客番号を 残しておくので対応は失われません。必要なときは顧客番号の値が一致する行どうしを 結合すれば、受注と顧客の情報を並べて取り出せます。
ウ表をまたいで取り出すたびに結合が必要になり、検索に時間がかかることがある。
正解。一覧を表示するだけでも顧客名は顧客の表、商品名は商品の表にあるため、 表を結び付ける処理が毎回発生します。分けるほど、この処理の負担は増えます。
エ検索が速くなる代わりに、データを更新する処理に時間がかかるようになる。
誤り。向きが逆で、これは非正規化(あえて表をまとめる設計)の特徴に近いものです。 1つの表にまとめれば読み出しは速くなりますが、同じ値を何か所も書き換える 手間を抱えます。正規化した表は更新が1か所で済み、検索で結合の負担を負います。
理解を深めるために
分ければ正しくなるが、集めるのに手間がかかる
書類を用途ごとのファイルに分けて整理すると、同じことを何枚にも書かずに済み、 直すときも1か所で終わります。その代わり、報告書を作るたびに何冊ものファイルを 開いて突き合わせる手間が生まれます。データベースの正規化も同じ性質を持っています。
なぜ検索に時間がかかるのか
正規化した販売管理のデータベースでは、情報が次のように分かれています。
- 顧客の表 … 顧客番号、顧客名、住所
- 商品の表 … 商品コード、商品名、単価
- 受注の表 … 受注番号、顧客番号、受注日
- 受注明細の表 … 受注番号、商品コード、数量
「誰が何をいくつ注文したか」という一覧を出すには、この4つの表を共通の項目で 結合しなければなりません。データ量が多い表どうしを何度も結合すると、 検索や集計に時間がかかることがあります。
そこで、表示の速さがとくに求められる箇所では、あえて一部の表をまとめて重複を 許す非正規化を選ぶことがあります。正しさ(更新時の食い違いを防ぐ)と 速さ(結合の負担を減らす)のどちらを優先するかを決めるのが、 パフォーマンスを意識した設計です。
混同しやすいものとの違い
| 設計 | 更新 | 検索 |
|---|---|---|
| 正規化(表を分ける) | 1か所を直せば済み、食い違いが起きにくい | 結合が増え、時間がかかることがある |
| 非正規化(表をまとめる) | 同じ値を何か所も直す必要があり、食い違いやすい | 結合が少なく、速くしやすい |
試験では「正規化で防げるもの」と「正規化で増えるもの」を入れ替えた選択肢が よく並びます。防げるのは更新時の食い違い、増えるのは結合の負担、と対で覚えます。