基底テーブルは行データを保持し、通常ビューは保存した問い合わせを表のように参照する仕組みです。さらに、問い合わせ結果を保存するマテリアライズドビューを分けて理解しましょう。
3つの役割を比較
| 比較 | 基底テーブル | 通常ビュー | マテリアライズドビュー |
|---|---|---|---|
| 中心となるもの | 保存する行データ | 問い合わせの定義 | 保存した問い合わせ結果 |
| 元データの変更 | この表自身を変更 | 参照時の可視性の規則に従い結果に反映 | 保存結果の更新・再生成が必要な方式がある |
| 更新 | 権限・制約などに従う | 定義とDBMSにより条件付き | 通常の表と同じ更新方法とは限らない |
通常ビューにも定義などを保存する領域は必要です。「実体なし」は、定義すら存在しない・容量を完全に使わないという意味ではありません。ここでは一時表などの特殊な表は省いて比較しています。
利用場面で考える
社員の情報そのものを保存するなら基底テーブル、部署ごとに必要な列だけを見せたいなら通常ビューが候補です。時間のかかる集計を保存して参照したいなら、マテリアライズドビューなどを検討します。ただし速さとデータの鮮度の両方を考える必要があります。
元表の変更と表示される時点
通常ビューは保存結果ではなく定義を使うので、参照時のトランザクションの規則に従って元データを読みます。PostgreSQLのマテリアライズドビューは結果を保持し、REFRESH MATERIALIZED VIEWなどで更新します。ほかのDBMSには別の更新方式もあり、「必ず自動で最新」とは限りません。
更新可否とセキュリティ
ビューを通したINSERT・UPDATE・DELETEは、どの元行を変更するかが明確であるかなど、定義と製品の条件に依存します。また、ビューで列を限定しても、元表への直接アクセス権を残せば情報を隠せるとは限りません。通常の表への操作にも権限や整合性制約があります。
名前だけで性能は決まらない
通常ビューは問い合わせを簡略に記述できますが、結果の事前保存による高速化を保証するものではありません。マテリアライズドビューも、保存領域・更新費用・鮮度の管理が必要です。「ビューなら小容量で必ず速い」という覚え方は避けます。
定義と参照のSQL例は、ビューの記事で確認できます。
確認問題
元表の変更を、保存結果を再生成するまで反映しない方式は、通常ビューとマテリアライズドビューのどちらでしょうか?
解答・解説を見る
結果を保存して更新する方式のマテリアライズドビューです。通常ビューは問い合わせの定義を利用し、参照時の可視性の規則に従ってデータを読みます。
ビューの元になるSQLをnoteで復習
関連noteにはSELECT・JOIN・GROUP BYの解説があります。表やビューの違いを理解した後は、仮想表の元になる問い合わせの読み方を復習できます。
無料note:SELECT・JOINとSQL頻出ポイントを学ぶ
ほかの教材は資格・目的別のnote教材ナビから選べます。


コメント