平成28年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10
テクノロジ/データベース更新可能なビューの定義はどれか。ここで,ビュー定義の中で参照する基底表は全て更新可能とする。
出典:平成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
正解:ウ
解説
ビューが更新可能となるためには,一般に単一の基底表からのSELECTであり,DISTINCTや集合関数,GROUP BYなどによる集約を含まないことが必要です。ビュー3は,一つの基底表“取引先”に対して単純なWHERE条件(取引先.ランク>15)で行を絞り込んでいるだけであり,どの基底表のどの行に対応するかが一意に定まるため,更新可能です。
選択肢ごとの解説
- ア誤り。ビュー1はSELECT DISTINCTによって重複行を排除しており,更新しようとした行が基底表のどの行に対応するか一意に定まらない場合があるため,一般に更新可能とは扱われません。
- イ誤り。ビュー2はGROUP BYによる集約を含んでおり,集約後の1行が基底表の複数行に対応するため,どの行を更新すべきかが一意に定まらず,更新可能ではありません。
- ウ正しい。ビュー3は単一の基底表“取引先”に対する単純な行の絞り込み(WHERE句)だけで構成されており,ビューの各行が基底表の1行に一意に対応するため,更新可能です。
- エ誤り。ビュー4は“取引先”と“製品”という複数の基底表を結合しており,ビューの1行がどちらの基底表のどの行の更新に対応するかが一意に定まらないため,更新可能ではありません。