【びゅー】

ビュー(DB) とは?

最終更新:
💡 SELECT文で決めた見方を、名前で使い回す

SELECT文の結果を、テーブルのように参照できる名前で定義する仕組み。通常のビューは結果の行を保存せず、参照時に元のテーブルに基づいて結果を求める。

📌 このページのポイント
SELECTで定めた見方を、名前で使う顧客表ID名前AKaiBMei注文表顧客ID金額A20A30顧客IDで結合する定義注文一覧ビュー名前金額Kai20Kai30通常のビューは、結果の行を保存しない
二つの表を結合するビューの例。結果の表は参照時の見え方を示し、通常のビューが保存するデータではない。
ひよこ ひよこ
ビューは複雑なSQLだけに使うの?
ペンギン先生 ペンギン先生
単純なSELECT文でも定義できるよ。たとえば顧客表と注文表を結合した結果を注文一覧という名前で定義すれば、その名前をSELECTして使える。列の選択や絞り込みを、利用する側から扱いやすい名前にまとめられるんだ。
ひよこ ひよこ
結果のデータが保存されるの?
ペンギン先生 ペンギン先生
通常のビューでは、定義した問い合わせを使い、参照時に元の表から結果を求めるよ。結果を保存するマテリアライズドビューとは区別しよう。PostgreSQLではREFRESH MATERIALIZED VIEWで保存結果を更新するので、更新するまでは元の表の変更が反映されないんだ。
ひよこ ひよこ
見せたくない列を省けば安全?
ペンギン先生 ペンギン先生
列を省いたビューを作るだけでは十分とは限らないよ。利用者が元の表を直接読めるなら、省いた列も見えてしまう。PostgreSQLではビューや元の表の権限、実行時に誰の権限を使うかなどを確認し、利用者の権限で実際に見える範囲を確かめることが必要なんだ。
ひよこ ひよこ
ビューを何段も重ねると必ず遅くなる?
ペンギン先生 ペンギン先生
段数だけでは決まらないよ。定義した問い合わせやデータ量などを見て判断する。マテリアライズドビューは保存結果を参照するので速くなる場合があるけれど、更新処理と結果の鮮度も考える必要がある。通常のビューより常に高速、という保証ではないんだ。
ひよこ ひよこ
ビュー経由で元の表を更新できる?
ペンギン先生 ペンギン先生
製品や定義によるよ。PostgreSQLでは、単一の表などを参照し、集計やDISTINCTなどを含まない条件に合うビューは自動更新できる。一方、複数表の結合や集計を含むビューは、そのままでは更新できないことがある。すべて読み取り専用、すべて更新可能のどちらでもないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ビュー(DB)」って出てきたら「SELECT文で定めたデータの見方を、名前で使える仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「View」 = 見る・見方・ビュー
💬 データの「特定の見方(view)」を定義したもの。同じデータでも部門別・用途別に異なるビューを作れる

参考資料

← 用語集にもどる