【びゅー】

ビュー(データベース) とは?

💡 よく使うクエリを「仮想テーブル」として保存する
📌 このページのポイント
ビュー ― 仮想テーブルで必要なデータだけ表示 社員テーブル ID 名前 部署ID 給与 1 田中 10 500 2 佐藤 20 600 3 鈴木 10 450 部署テーブル 部署ID 部署名 10 営業部 20 開発部 CREATE VIEW SELECT + JOIN 営業部ビュー(仮想) 名前 部署 給与 田中 営業部 500 鈴木 営業部 450 実データは持たない 必要なデータだけを安全に見せる「窓」のような存在
ビュー(データベース)のイメージ
ひよこ ひよこ

テーブルとどう違うの?

ペンギン先生 ペンギン先生

テーブルは実際にデータが格納されている実体。ビューはSQLクエリの定義だけを保存する仮想テーブルで、データの実体を持たない。ビューにSELECTすると、内部で定義されたクエリが実行されてその結果が返る。CREATE VIEW active_users AS SELECT * FROM users WHERE status = 'active'; のように定義するよ

ひよこ ひよこ

どんなときに使う?

ペンギン先生 ペンギン先生

①複雑なJOINクエリを何度も書くのを避ける(5テーブル結合のクエリをビュー化)、②アクセス制御(給与テーブルの個人名だけ見せるビューを作る)、③アプリケーション層とテーブル構造を分離(テーブルを変更してもビューのインターフェースを維持)。レポート用のビューは特によく使われるよ

ひよこ ひよこ

パフォーマンスは大丈夫?

ペンギン先生 ペンギン先生

ビューは毎回クエリを実行するから、複雑なクエリだとパフォーマンスが問題になることがある。対策として①インデックスが効くようにビューのクエリを最適化、②マテリアライズドビュー(結果を実体化して保存)を使う、③データウェアハウスでは事前集計テーブルを用意。用途に応じて使い分けようね

ひよこ ひよこ

ビューの更新はできる?

ペンギン先生 ペンギン先生

単純なビュー(1テーブル、集約なし)ならINSERT/UPDATE/DELETEが可能で、実テーブルに反映される。JOINや集約を含むビューは読み取り専用。INSTEAD OFトリガーを使えば更新可能にもできるが複雑になる。一般的にはビューは読み取り用と割り切って、更新は直接テーブルに対して行う方がシンプルだよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ビュー」って出てきたら「SQLクエリを仮想テーブルとして保存する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Database View」 = データベースのビュー(視点)
💬 View(見方・視点)。テーブルのデータを特定の視点で見る仕組みだよ
← 用語集にもどる