ビュー(view)
データベースのビューとは
関係データベースにおけるビュー(英:view)とは、1つ以上の表(テーブル)から必要な要素だけを取り出して作った仮想的な表のことです。
例えば、次のような3つの表があるとします。
「社員テーブル」は社員の情報を管理している表、「部署マスタ」は部署の情報を管理している表、「課マスタ」は課の情報を管理している表です。
データベースの表はデータを効率よく格納するために正規化されています。この正規化された表は、必ずしも使いやすいとは限りません。
例えば、次のような「営業部の社員」だけを管理する表を利用したいとき、「社員テーブル」「部署マスタ」「課マスタ」の表を結合する必要があります。
そこで、用途に応じた仮想的な表を作ることができます。これがビュー(view)です。
上記はビューのイメージ例です。
「社員テーブル」「部署マスタ」「課マスタ」から必要な要素だけ取り出して「仮想的な表」を作成しています。
スポンサーリンク
なぜビューが必要なのか?ビューのメリットとは
ビューを作らなくても、複数の表を結合すればビューと同じ結果を得ることができます。ではなぜビューを使うのでしょうか。
ビューには次のメリットがあります。
ビューのメリット
- SQL文をシンプルにする
- セキュリティを高める
【ビューのメリット1】SQL文をシンプルにする
1つ目のメリットは「SQL文をシンプルにする」ということです。複数の表を結合すると、結合する表の数が多いほど、SQL文は複雑化します。
事前にビューを作っておくことで、表を結合する必要がなくなりシンプルで分かりやすいSQL文を書くことができます。
【ビューのメリット2】セキュリティを高める
2つ目のメリットは「セキュリティを高める」ということです。表には権限があり、表の権限はデータベースのユーザー毎に設定できます。(GRANT文)
例えば、次のような権限を付与したとします。
- 社員テーブル:操作権限なし
- 営業部の社員テーブル(view):操作権限あり
ビューの参照元である「社員テーブル」へのアクセスは拒否しているため、営業部の社員は他部署の情報を見ることができません。
このようにビューを利用することで、セキュリティを高められます。
更新可能なビュー
ビューは参照するだけではなく、通常の表と同じようにデータを追加(INSERT文)したり、更新(UPDATE文)、削除(DELETE文)することもできます。
ビューは「仮想的な表」であり実体はありません(実体は参照元の表)
そのため、ビューに対して行われた更新操作は、参照元の表に対して行われます。
ビューには、「更新可能なビュー」と「更新できないビュー」が存在します。更新できるか、できないかは元となる行が特定できるかどうかで決まります。
例えば、MAXやAVGなどの集合関数を使って作られたビューは元となる行が特定できないので、更新できません。
その他にも複数の表を結合している(例外あり)場合や、DISTINCT、GROUP BY、HAVINGを利用している場合、副問合せが含まれている場合なども更新することはできません。