基本情報技術者 2012年 春期 午前(科目A) 問29
問題文
関係データベース管理システム(RDBMS)におけるビューに関する記述のうち、適切なものはどれか。
選択肢
ア:ビューとは、名前を付けた導出表のことである。(正解)
イ:ビューに対して、ビューを定義することはできない。
ウ:ビューの定義を行ってから、必要があれば、その基底表を定義する。
エ:ビューは一つの基底表に対して一つだけ定義できる。
🔒 解説は解答すると表示されます
ビュー(導出表)【午前解説】
正解の理由
ア:「ビューとは、名前を付けた導出表のことである。」は正しい定義です。
ビューは SELECT 文(やその結果集合)に名前を付けて再利用できる論理的な表現であり、基底表のデータを参照して結果を返します。一般的な SQL の仕様では CREATE VIEW view_name AS SELECT ... で定義します。ビュー自体は通常データを持たず(仮想表)、基底表の更新に応じて結果が変わります。したがって選択肢アが正解です。
ビューは SELECT 文(やその結果集合)に名前を付けて再利用できる論理的な表現であり、基底表のデータを参照して結果を返します。一般的な SQL の仕様では CREATE VIEW view_name AS SELECT ... で定義します。ビュー自体は通常データを持たず(仮想表)、基底表の更新に応じて結果が変わります。したがって選択肢アが正解です。
解法ステップ
- 選択肢の文言を一つずつ読み、ビューの基本定義(仮想表=導出表)と照合する。
- 「ビューの上にビューを定義できるか」「定義順」「一対一の制限」など、各選択肢が仕様や実装常識と一致するかを確認する。
- 実務的な例(CREATE VIEW、SELECT)を頭に描き、論理的に矛盾する選択肢を除外する。
- 最終的に「名前を付けた導出表」という核心を満たすものを正答とする。
選択肢別の誤答解説
- ア: 正解。ビューは SELECT などの結果集合に名前を付けた導出表(仮想表)であるため正しい。
- イ: 誤り。ビューの上にさらにビュー(ネストされたビュー)を定義することは可能であり、ビューは他のビューを参照できます。
- ウ: 誤り。一般にビューの定義時には参照する基底表が存在している必要で、ビューを先に定義しておき後から基底表を定義することは多くの DBMS で許可されません(実装依存)。
- エ: 誤り。1つの基底表に対して複数のビューを定義することは通常可能で、一つだけという制約はありません。
よくある誤解
- 「ビューは物理的に必ずデータを持たない」:多くは仮想表ですが、DBMS によってはマテリアライズドビュー(物理化)があります。
- 「ビューの定義は必ず基底表より後でなければならない」:ほとんどの実装では参照先オブジェクトが存在する必要がありますが、仕様やツールによっては差があります。
- 「ビューは一対一でしか定義できない」:同じ基底表に対して複数の異なるビューを定義することは普通に可能です。
補足コラム
- CREATE VIEW の簡単な例:
CREATE VIEW sales_summary AS
SELECT product_id, SUM(amount) AS total_amount
FROM sales
GROUP BY product_id;
この view は基底表 sales の集計結果に名前を付けた導出表です。
- マテリアライズドビュー:結果を物理的に保持しクエリ応答を高速化しますが、更新・同期の運用が必要です。Oracle や PostgreSQL(拡張)などでサポートされます。
- ビューの更新可能性:単純な SELECT に基づくビューは INSERT/UPDATE/DELETE が可能なことがありますが、集約・結合・DISTINCT 等を含むと更新不可になります。詳細は各 DBMS のドキュメントを参照してください。
FAQ
Q1: ビューはインデックスできますか?
A1: 仮想ビュー自体には通常インデックスを作成できません。マテリアライズドビューや基底表に対してインデックスを作成します。
A1: 仮想ビュー自体には通常インデックスを作成できません。マテリアライズドビューや基底表に対してインデックスを作成します。
Q2: ビューはパフォーマンスを悪化させますか?
A2: 単純なビューは最終的に基底表のクエリに展開され最適化されますが、複雑なネストや非効率な定義はパフォーマンス悪化の原因になります。
A2: 単純なビューは最終的に基底表のクエリに展開され最適化されますが、複雑なネストや非効率な定義はパフォーマンス悪化の原因になります。
Q3: ビューを作成する前に基底表が必要ですか?
A3: 多くの DBMS では参照先オブジェクトが存在する必要があります。実装により振る舞いが異なるため注意してください。
A3: 多くの DBMS では参照先オブジェクトが存在する必要があります。実装により振る舞いが異なるため注意してください。
関連キーワード: ビュー、RDBMS、SQL、CREATE VIEW、マテリアライズドビュー、更新可能ビュー、基底表、ネストされたビュー、SELECT文、集約処理

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

