今回のテーマは、関係データベースにおける「ビュー」についてです。
ビュー?
基本情報技術者試験や応用情報技術者試験で出題される関係データベースにおける「ビュー」についての問題。聞きなれない言葉なので、難しく感じますが、「ビュー」の動きを理解していれば、そこまで難しい問題ではありません。
本記事では、ビューについて解説しています。
スポンサーリンク
目次
ビューとは
関係データベースにおけるビュー(英:view)とは、1つ以上のテーブルから必要な要素だけを取り出して作った、仮想的なテーブルのことです。
関係データベースとは、データを表の形で管理するデータベースのことで、次のように、関係データベースのテーブル(表)は、レコード(行)とカラム(列)によって形成されています。
例えば、次のような3つのテーブルがあるとします。
社員テーブルは、社員の情報を管理しているテーブル、部署マスタは、部署の情報を管理しているテーブル、課マスタは、課の情報を管理しているテーブルです。
データベースのテーブルは、データを効率よく格納するために正規化されています。ただ正規化されたテーブルは、必ずしも使いやすいとは限りません。
次のように「営業部の社員」だけの情報が必要なとき、「社員テーブル」「部署マスタ」「課マスタ」のテーブルを結合する必要があります。
営業部だけのテーブルがあると助かるんだけどなぁ・・・。
そんなときに便利なのが、ビューです。
ビューは、1つ以上のテーブルから必要な要素だけを取り出して仮想的なテーブルが作れます。
下記は、ビューのイメージ例です。
「社員テーブル」「部署マスタ」「課マスタ」から必要な要素だけ取り出して「仮想的なテーブル」を作成しています。
ビューを採用するメリット
わざわざビューを作らなくても、複数のテーブルを結合すれば、ビューと同じ結果が得られます。
ではなぜビューを使うのでしょうか。
ビューには次のメリットがあります。
- SQL文をシンプルにする
- セキュリティを高める
ビューのメリット1:SQL文をシンプルにする
1つ目のメリットは、ビューを採用するとSQL文がシンプルになるところです。
SQL文は結合するテーブルが多い程、複雑化します。
事前にビューを作っておけば、毎回テーブルを結合する必要がなくなり、シンプルで分かりやすいSQL文が作れます。
ビューのメリット2:セキュリティを高める
2つ目のメリットは、セキュリティを高められるところです。
テーブルには権限があり、テーブルの権限はデータベースのユーザー毎に設定できます。(GRANT文)
例えば、営業部の社員に、次のような権限を付与したとします。
- 社員テーブル:操作権限なし
- 営業部の社員テーブル(ビュー):操作権限あり
社員テーブルからビュー(営業部の社員テーブル)を作成しています。
営業部の社員は、参照元である社員テーブルにはアクセス権限がないので、他部署の情報を閲覧できません。ビューで作成した自部署のテーブル(営業部の社員テーブル)のみ閲覧できます。
このようにビューを利用することで、セキュリティを高められます。
更新可能なビュー
ビューは参照だけでなく、通常のテーブルと同じように登録(INSERT文)、更新(UPDATE文)、削除(DELETE文)できます。
ただ、ビューは「仮想的なテーブル」であり実体はありません(実体は参照元のテーブル)
そのため、ビューに対しておこなわれた更新操作(登録・更新・削除)は、参照元のテーブルに対しておこなわれます。
ビューには、「更新可能なビュー」と「更新できないビュー」が存在します。更新可能かどうかは、参照元のレコードが特定できるかどうかで決まります。
例えば、「MAX」「MIN」「SUM」「COUNT」「AVG」などの集約関数を使って作られたビューは、元となるレコードが特定できないので、更新できません。
その他にも、複数のテーブルを結合している(例外あり)場合や、「DISTINCT」「GROUP BY」などを利用している場合、「副問合せ」が含まれている場合など、参照元のレコードが特定できないビューは更新できません。
情報処理試験 過去問の解説
基本情報技術者平成24年春期 午前問29
関係データベース管理システム(RDBMS)におけるビューに関する記述のうち,適切なものはどれか、ア~エを順番に確認していきます。
ア:ビューとは,名前を付けた導出表のことである。
正解:ビューの説明です。
イ:ビューに対して,ビューを定義することはできない。
不正解:ビューをもとに、ビューを作成することも可能です。
ウ:ビューの定義を行ってから,必要があれば,その基底表を定義する。
不正解:基底表(実表)の定義を行ってから、必要があれば、ビューを定義します。
エ:ビューは一つの基底表に対して一つだけ定義できる。
不正解:一つの基底表(実表)から、複数ビューを定義できます。
「ア」が正解です。
応用情報技術者令和5年秋期 午前問28
更新可能なビューを作成するSQL文はどれか、ア~エを順番に確認していきます。
ビューには、「更新可能なビュー」と「更新できないビュー」が存在します。更新可能かどうかは、参照元のレコードが特定できるかどうかで決まります。
ア:CREATE VIEW 高額商品(商品番号, 商品名, 商品単価) AS SELECT 商品番号, 商品名, 商品単価 FROM 商品 WHERE 商品単価 > 1000
正解:更新可能なビューです。(参照元のレコードが特定できる)
イ:CREATE VIEW 受注商品(商品番号) AS SELECT DISTINCT 商品番号 FROM 受注
不正解:「DISTINCT」が含まれているため、更新できません。(参照元のレコードが特定できない)
ウ:CREATE VIEW 商品受注(商品番号, 受注数量) AS SELECT 商品番号, SUM(受注数量) FROM 受注 GROUP BY 商品番号
不正解:集約関数「SUM」 および 「GROUP BY」が含まれているため、更新できません。(参照元のレコードが特定できない)
エ:CREATE VIEW 商品平均受注数量(平均受注数量) AS SELECT AVG(受注数量) FROM 受注
集約関数「AVG」が含まれているため、更新できません。(参照元のレコードが特定できない)
「ア」が正解です。