平成28年度 春期 午前Ⅱ 問10
データ操作
更新可能なビューの定義
更新可能なビューの定義はどれか。ここで,ビュー定義の中で参照する基底表は全て更新可能とする。
- ア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
答えと解説を見る
✓ これが正解ウCREATE VIEW ビュー3(取引先番号, ランク, 住所) AS SELECT 取引先.取引先番号, 取引先.ランク, 取引先.住所 FROM 取引先 WHERE 取引先.ランク > 15
解説
一つの基底表から行と列を選ぶだけのビューは、更新できます。
ビューを通して更新するには、ビューの各行が基底表のどの行に当たるかを一つに特定できなければなりません。正解のビューは、取引先表の一つだけを基に、ランクが15を超える行を選び、取引先番号、ランク、住所の列をそのまま取り出しています。ビューの1行が取引先表の1行にそのまま対応するので、ビューに対する更新を基底表の行の更新に置き換えられます。反対に、重複を除いたり、グループにまとめたり、複数の表を組み合わせたりすると、ビューの1行が基底表のどの行に当たるかが一つに決まらなくなります。ビューの行と基底表の行が1対1に対応するかで判断すると見分けられます。
ほかの選択肢はなぜ違うのか
- アCREATE VIEW ビュー1(取引先…:DISTINCTで重複を除いているため、ビューの1行が基底表の複数の行をまとめたものになることがあります。どの行を更新すればよいかが一つに決まらないので、更新可能なビューにはなりません。
- イCREATE VIEW ビュー2(取引先…:GROUP BYで取引先番号と製品番号の組ごとにまとめているので、ビューの1行の背後には基底表の行が複数あり得ます。対応する行を特定できないため、ビューを通した更新はできません。
- エCREATE VIEW ビュー4(取引先…:取引先表と製品表の二つを組み合わせたうえ、HAVINGで条件を付けています。ビューの1行が二つの表の行の組合せになっており、基底表のどの行を変えればよいかが決まらないので、更新できません。
出典:平成28年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)