ホーム > データベーススペシャリスト試験 > 2016年

データベーススペシャリスト試験 2016年 午前210


更新可能なビューの定義はどれか。ここで, ビュー定義の中で参照する基底表は全て更新可能とする。
CREATE VIEW ビュー1(取引先番号, 製品番号) 
    AS SELECT DISTINCT 納入.取引先番号, 納入.製品番号
    FROM 納入
CREATE VIEW ビュー2(取引先番号, 製品番号)
    AS SELECT 納入.取引先番号, 納入.製品番号
    FROM 納入
    GROUP BY 納入.取引先番号, 納入.製品番号
CREATE VIEW ビュー3(取引先番号, ランク, 住所)
    AS SELECT 取引先.取引先番号, 取引先.ランク, 取引先.住所
        FROM 取引先
        WHERE 取引先.ランク > 15
(正解)
CREATE VIEW ビュー4(取引先住所, ランク, 製品倉庫)
    AS SELECT 取引先.住所, 取引先.ランク, 製品.倉庫
        FROM 取引先, 製品
        HAVING 取引先.ランク > 15

解説

# 更新可能なビューの定義についての解説

## 問題の背景
ビューとは、テーブル(基底表)に対して定義される仮想的な表のことです。ビューは通常のSELECT文で定義され、参照はできますが、その更新(INSERT・UPDATE・DELETE)が可能かどうかはビューの定義次第です。

**「更新可能なビュー」とは、ビューを通じて基底表のデータの変更(挿入・更新・削除)が可能なビューを指します。**

---

## 更新可能なビューの条件(一例)

ビューが更新可能になるためには、一般的に以下のような条件が必要です。

1. **単一の基底表からの参照**  
   ビューは1つのテーブルからのみデータを返すこと。

2. **集約関数やDISTINCTの不使用**  
   SUMやCOUNTなどの集約関数やDISTINCT句を含むビューは、更新可能性が制限される。

3. **GROUP BYを含まない**  
   GROUP BYを含むビューは集約のため、更新はできない。

4. **結合や結合条件が単純であること(結合がないことが望ましい)**  
   複数テーブルの結合をビューに含む場合、更新可能かどうかは非常に限定的。

5. **WHERE句の条件が十分に単純なこと**  
   複数行を1行にまとめるような条件や複雑なものは避ける。

---

## 選択肢の分析

### ア: ビュー1

```sql
CREATE VIEW ビュー1(取引先番号, 製品番号) 
AS SELECT DISTINCT 納入.取引先番号, 納入.製品番号
FROM 納入
  • DISTINCT句を使用しているため、重複行を除外している。
  • DISTINCT句を含むビューは一般に更新可能でない。
→ 更新不可

イ: ビュー2

CREATE VIEW ビュー2(取引先番号, 製品番号)
AS SELECT 納入.取引先番号, 納入.製品番号
FROM 納入
GROUP BY 納入.取引先番号, 納入.製品番号
  • GROUP BYを含んでいるため、グルーピングによって複数の行が1行にまとめられている可能性あり。
  • 集約を伴うビューは更新不可。
→ 更新不可

ウ: ビュー3

CREATE VIEW ビュー3(取引先番号, ランク, 住所)
AS SELECT 取引先.取引先番号, 取引先.ランク, 取引先.住所
FROM 取引先
WHERE 取引先.ランク > 15
  • 単一テーブル「取引先」からの参照
  • WHERE句は更新不可能性に必ずしも影響しない
  • DISTINCT、GROUP BY、集約関数なし
  • 結合なし
このビューは更新可能と判断できる。

エ: ビュー4

CREATE VIEW ビュー4(取引先住所, ランク, 製品倉庫)
AS SELECT 取引先.住所, 取引先.ランク, 製品.倉庫
FROM 取引先, 製品
HAVING 取引先.ランク > 15
  • 複数テーブル(取引先と製品)を結合している(クロス結合)
  • HAVING句はグループ化を伴うための句だが、このSQLではGROUP BYがない(文法的に不適切の可能性もある)
  • 複数テーブルの結合を含み、更新可能であることは非常に限定的
→ 更新不可

結論

  • 更新可能なビューの要件を満たしているのは「ウ」のビュー3のみ
    単一テーブル参照、WHERE条件あり、集約やDISTINCTなし、結合なし。

補足情報

更新可能ビューの判定はDBMSにより多少異なりますが、一般的なルールは上記の通りです。

まとめ

選択肢更新可能性の理由結論
DISTINCT使用更新不可
GROUP BY使用更新不可
単一テーブル、集約なし、結合なし更新可能
複数テーブル結合、HAVING句(不適切含む)更新不可

以上より、正解は です。
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ