更新日:
システム開発において、複雑なデータ検索を効率化し、セキュリティや運用の利便性を高めるために多用される重要な仕組み、それがビュー。データベース設計の洗練度を左右する要素でもあります。本章では、ビューの基本的な概念から作成・削除の手順まで、その構造を詳しく見ていきましょう。
ビュー
ビューとは、データベース内に実データを持たない「架空のテーブル」のこと。物理的なテーブルには実際のレコードが直接格納されますが、ビューは特定の検索結果を映し出す鏡のような役割を果たします。これを通すことで、データをより閲覧しやすく、あるいは管理しやすくコントロールできるのがメリット。ざっくり言うと、”長くて複雑な結合SQLを何度も書かなくて済むための仕組み”と言えます。
単一ビュー&複合ビュー
ビューは、作成完了後も通常のテーブルとほとんど同じ感覚(SELECT文だけでなく一部のDML文の発行など)で扱うことが可能です。しかし、定義の仕方によって次の2種類のビューに分類され、データの操作に関する性質が少々変わってきます。
単一ビュー
- 一つのテーブルだけを元にして作成される。
- SQL関数を定義内に含まない。
- GROUP BY句などのグループ化処理を含まない。
- ビューに対して、直接データの追加(INSERT)、更新(UPDATE)、削除(DELETE)が可能である。
複合ビュー
- 複数のテーブルを結合(JOIN)して作成される。
- SQL関数を定義内に含む。
- GROUP BY句などのグループ化処理を含む。
- ビューに対してデータの追加、更新、削除を行うことは不可能である。
参考サイト:MySQL 公式サイト(ビュー)
ビューの作成
新しくビューを定義・構築する際は、CREATE VIEW文を発行します。基本的な定義方法は「既存表からのテーブル作成(AS SELECT)」と全く同じスタイル。非常にシンプルな形です。
ただし、通常のテーブル作成と大きく異なる点が1点あります。ビューには、定義変更を行うためのALTER文が存在しません。そのため、定義を修正したいときには代わりにOR REPLACEオプションを付与し、既存の定義ごと上書き置換を行う必要があります。
このオプションは、すでに同一名称のビューがデータベース内に存在している場合のみに効果を発揮します。既存のものがない新規作成時でもエラーにはならないため、常に記述していても問題はありません。システム開発現場における作業効率を高めるためにも、常に記述することを推奨します。
WITH READ ONLYオプションは、そのビューを強制的に「読み取り専用(データ変更を一切認めない)」に制限したい場合に付加するパラメータ。なお、先述した「複合ビュー」として作成したビューは、データベースのシステム特性として自動的に読み取り専用属性となるため、その際は明示的にこのオプションを付加する必要はありません。
参考サイト:MySQL 公式サイト(CREATE VIEW 構文)
ビューの削除
不要になった架空のテーブル構造をデータベースから消去する際は、DROP VIEW文を使用します。
ビューを削除しても、そのビューの元になっているベース of 物理テーブルや、そこに格納されている実際のデータレコード自体が消去されることはありません。あくまで架空の窓口を削除するのみ。

