はじめに
こんにちは。BiTT開発事業部、テクニカルディレクターのsarahです。
今までDB(データベース)まわりにあまり触れてこなかったため、簡単なテーブル設計をする程度で複雑なSQL文を書く機会があまりありませんでした。しかし、現在参画しているプロジェクトではDBに触る機会が比較的たくさんあるため、日々DB関連で新しい学びがある状況です。今回は関係データベース(Relational Database)におけるview(ビュー)についてまとめていきたいと思います。
viewとは
1つ以上のテーブルから任意のデータを選択・結合等を行い必要な情報を表示することができる仮想的なテーブルのことです。CREATE TABLEして物理的に作成されるテーブルとは違い、実体がありません。
やっていることとしてはSELECT文でデータを抽出しているのと変わりませんが、一度書いたSELECT文を何度も書かなくて良いというところが違いでしょうか(詳しいメリットについては下記で説明します)。
テーブルと違い、中身そのものが記憶されるのではなく、参照されるたびに一時的に仮想テーブルが作成されます。
viewを使うメリット
上記でも少し触れている通り、Viewにはさまざまなメリットがあります。
テーブルほどの容量を必要としない
実際のデータが記憶されるわけではなく、記憶されるのはSELECT文そのものなので、容量を圧迫せずに済む。
SELECT文を都度書く必要がない
毎回複雑なSQLを書くことなく複数のテーブルから必要な情報だけを参照することができる。実際にデータを保持しているわけではないが、実際のテーブルと同じように表される。
セキュリティ面で安全である
参照権限をユーザごとに設定できるため、セキュリティ面でのメリットがある。
メリットとしては上記の通りですが、viewでできないこととして、普通のテーブルと同じように追加更新削除ができないケースがあります。
- 集約値を含む(COUNT, SUM, MAXなどの集約関数・GROUP BY, Having句などが使われている)場合
- 複数の表を結合している場合
- 副問合せで同一の表を参照している・DISTINCTで重複行がまとめられているなど変更対象の行が特定できない場合
- 読み取り専用の場合
こちらの場合は行が特定できない(もしくは読み取り専用で操作が許されていない)ため、値を変更することができません。それ以外の場合は通常のテーブルと同じように、参照元のテーブルに対して追加更新削除の操作が可能です。
さいごに
余談ですがMaterialised view(体現ビュー)というものもあり、こちらは実体があるため都度参照のたびに処理を行う必要がありません。しかし、最新の情報は反映されないため、必要に応じて更新する必要があります。
Materialised viewはViewと比較すると処理速度などの面で優れています。セキュリティよりもパフォーマンスを重視する際など、状況によって使い分けられると良さそうですね。
以上、viewについてのまとめを読んでいただきありがとうございました! これからも一緒に爆速で成長していきましょう!
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。