DP-900:Microsoft Azure Data Fundamentals Azure のリレーショナルデータ 問1
Azure のリレーショナルデータ/リレーショナルの概念ある会社の受注データベースでは、注文テーブルに顧客の氏名・住所が注文のたびに繰り返し格納されている。ある顧客の住所変更を反映する際に一部の注文行だけ更新を忘れ、同じ顧客なのに行ごとに異なる住所が残ってしまう問題が起きた。この種の不整合を防ぐためにテーブル設計で行うべきことはどれか。
当サイトのオリジナル問題(DP-900:Microsoft Azure Data Fundamentalsの出題範囲「Azure のリレーショナルデータ」に対応。実際の試験問題ではありません)
- A顧客情報を別テーブルに分離し、外部キーで関連付けるようにテーブル設計を見直す
- B注文テーブルに対してビューを作成し、重複した顧客情報をまとめて表示する
- C注文テーブルの顧客住所の列に非クラスター化インデックスを追加する
- D注文テーブルの主キーを顧客IDと注文日の複合主キーに変更する
正解:A
解説
リレーショナルデータベースの正規化は、同じ情報を複数の行に重複して持たせないようにテーブルを分割し、更新時のデータ不整合(更新異常)を防ぐことを目的とした設計手法です。本問のように注文のたびに顧客情報が繰り返し格納されていると、一部の行だけが更新されて他の行と矛盾した値が残る問題が起こりやすくなります。顧客情報を独立したテーブルに分離し、注文テーブルからは外部キーで参照する構造にすれば、顧客情報は1か所にのみ保持されるため、更新時の不整合を防げます。ビューやインデックス、複合主キーへの変更はいずれも検索性や表示方法に関わる仕組みであり、データの重複そのものを解消するものではありません。
選択肢ごとの解説
- A正しい。繰り返し出現する顧客情報を別テーブルに分離し外部キーで参照する構造にすることで、同じ情報を複数行に重複して持たなくなり、更新時に一部の行だけ古い値が残るといった更新異常を防げます。
- B誤り。ビューは既存のテーブルに対する仮想的な問い合わせ結果にすぎず、基になる注文テーブル側の重複したデータ自体は解消されないため、更新異常の原因は残ります。
- C誤り。インデックスは検索や並べ替えを高速化するための仕組みであり、テーブル内のデータの重複や更新異常を解消する設計上の対策にはなりません。
- D誤り。主キーを複合主キーに変更しても、顧客情報が注文のたびに繰り返し格納される構造自体は変わらないため、同じ更新異常が発生します。