広告 基本情報技術者

【基本情報技術者試験】データベースのビュー

2024年5月28日

教授
教授

今回のテーマは、関係データベースにおける「ビュー」についてです。

ビュー?

助手
助手

問題

関係データベース管理システム(RDBMS)におけるビューに関する記述のうち,適切なものはどれか。

  • ア:ビューとは,名前を付けた導出表のことである。
  • イ:ビューに対して,ビューを定義することはできない。
  • ウ:ビューの定義を行ってから,必要があれば,その基底表を定義する。
  • エ:ビューは一つの基底表に対して一つだけ定義できる。

基本情報技術者平成24年春期 午前問29

問題

更新可能なビューを作成するSQL文はどれか。ここで,SQL文中に現れる基底表は全て更新可能とする。

  • ア:CREATE VIEW 高額商品(商品番号, 商品名, 商品単価) AS SELECT 商品番号, 商品名, 商品単価 FROM 商品 WHERE 商品単価 > 1000
  • イ:CREATE VIEW 受注商品(商品番号) AS SELECT DISTINCT 商品番号 FROM 受注
  • ウ:CREATE VIEW 商品受注(商品番号, 受注数量) AS SELECT 商品番号, SUM(受注数量) FROM 受注 GROUP BY 商品番号
  • エ:CREATE VIEW 商品平均受注数量(平均受注数量) AS SELECT AVG(受注数量) FROM 受注

応用情報技術者令和5年秋期 午前問28

基本情報技術者試験や応用情報技術者試験で出題される関係データベースにおける「ビュー」についての問題。聞きなれない言葉なので、難しく感じますが、「ビュー」の動きを理解していれば、そこまで難しい問題ではありません。

本記事では、ビューについて解説しています。

本記事で学べること

  • データベースのビューを理解する
  • ビューのメリットを理解する
  • 更新可能なビューを理解する
  • 情報処理試験の過去問の解き方を学ぶ

スポンサーリンク

ビューとは

関係データベースにおけるビュー(英: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)におけるビューに関する記述のうち,適切なものはどれか。

  • ア:ビューとは,名前を付けた導出表のことである。
  • イ:ビューに対して,ビューを定義することはできない。
  • ウ:ビューの定義を行ってから,必要があれば,その基底表を定義する。
  • エ:ビューは一つの基底表に対して一つだけ定義できる。

基本情報技術者平成24年春期 午前問29

関係データベース管理システム(RDBMS)におけるビューに関する記述のうち,適切なものはどれか、ア~エを順番に確認していきます。

ア:ビューとは,名前を付けた導出表のことである。

正解:ビューの説明です。

イ:ビューに対して,ビューを定義することはできない。

不正解:ビューをもとに、ビューを作成することも可能です。

ウ:ビューの定義を行ってから,必要があれば,その基底表を定義する。

不正解:基底表(実表)の定義を行ってから、必要があれば、ビューを定義します。

エ:ビューは一つの基底表に対して一つだけ定義できる。

不正解:一つの基底表(実表)から、複数ビューを定義できます。

助手
助手

「ア」が正解です。

応用情報技術者令和5年秋期 午前問28

問題

更新可能なビューを作成するSQL文はどれか。ここで,SQL文中に現れる基底表は全て更新可能とする。

  • ア:CREATE VIEW 高額商品(商品番号, 商品名, 商品単価) AS SELECT 商品番号, 商品名, 商品単価 FROM 商品 WHERE 商品単価 > 1000
  • イ:CREATE VIEW 受注商品(商品番号) AS SELECT DISTINCT 商品番号 FROM 受注
  • ウ:CREATE VIEW 商品受注(商品番号, 受注数量) AS SELECT 商品番号, SUM(受注数量) FROM 受注 GROUP BY 商品番号
  • エ:CREATE VIEW 商品平均受注数量(平均受注数量) AS SELECT AVG(受注数量) FROM 受注

応用情報技術者令和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」が含まれているため、更新できません。(参照元のレコードが特定できない)

助手
助手

「ア」が正解です。

helpful