SQL設計・ウィンドウ関数・関係代数 重要度:★★出題: AM2・PM1
ビュー(VIEW)の更新可能性とマテリアライズドビュー(実体化ビュー)
びゅーのこうしんかのうせいとまてりあらいずどびゅー / Updatable Views & Materialized Views
SELECT文の定義のみを保持する仮想表(ビュー)に対してINSERT/UPDATE/DELETEが可能となる条件と、問合せ結果自体を物理的に保持して高速化するマテリアライズドビュー。
3行速習ポイント
- 通常のビューは実データを持たず参照のたびに基底表へアクセスするが、GROUP BY・HAVING・DISTINCT・集合関数・集合演算(UNION等)を含むビューは原則として直接更新できない
- `WITH CHECK OPTION` を指定したビューでは、そのビューのWHERE句の条件を満たさないような行のINSERTやUPDATEをエラーとして拒否する
- マテリアライズドビュー(実体化ビュー)は集計・結合結果を物理格納し索引も作成できるため参照が高速になる一方、基底表更新との同期(リフレッシュ)設計が必要
図解
図通常のビュー(仮想表)とマテリアライズドビュー(実体化表)
通常のビュー(CREATE VIEW)論理データ独立性
実データを持たず参照時に基底表へアクセス。単一表の単純選択なら更新可能(WITH CHECK OPTION対応)
マテリアライズドビュー(実体化ビュー)集計高速化
集計・結合結果を物理領域に保持し索引付けも可能。高速参照と引き換えにリフレッシュが必要
概要と本質
午前IIのSQL問題で「更新可能なビューはどれか」「WITH CHECK OPTIONを指定したビューに対するUPDATE文の挙動はどれか」として頻繁に出題される定番論点です。
重要ポイント・コア概念
- 更新不可能なビューの条件(SQL標準の基本):基底表の1つの行とビューの1つの行が1対1に対応しないもの(GROUP BY、DISTINCT、集合関数、UNION、複数表の結合等)は更新不可
- WITH CHECK OPTION:例えば `WHERE 部門コード = 'D01'` で定義されたビューに対し、`部門コード = 'D02'` の行をINSERTしたり既存行を `'D02'` にUPDATEしたりすると制約違反エラーになる
- 論理データ独立性:基底表を垂直分割・水平分割しても、従来と同じ列構成のビューを提供することでアプリケーションのSELECT文変更を局所化できる
午後I・午後II記述試験での攻略ポイント
午前IIで「更新可能なビューはどれか」が出たら、`GROUP BY`、`DISTINCT`、`AVG/SUM/COUNT`、`UNION` が入っている選択肢を消去し、単一基底表から主キーを含んで単純に列・行を選択しているものを選びます。
午後記述で使える加点キーワード(クリックでコピー)
この用語が出題された過去問を解く(1分演習)
即時アウトプットで定着データベーススペシャリスト 過去問演習で実践力を鍛える