IPA過去問ドリル

平成22年度 春期 データベーススペシャリスト試験 午前Ⅱ 問3

テクノロジ/データベース

表Rに,(A,B)の2列でユニークにする制約(UNIQUE制約)が定義されているとき,表Rに対するSQL文でこの制約の違反となるものはどれか。ここで,表Rには主キーの定義がなく,また,すべての列は値が決まっていない場合(NULL)もあるものとする。 R A|B|C|D AA01|BB01|CC01|DD01 AA01|BB02|CC02|NULL AA02|BB01|NULL|DD03 AA02|BB03|NULL|NULL (注:本サイトでは原問題の表を文字表記に変換しています)

出典:平成22年度 春期 データベーススペシャリスト試験 午前Ⅱ 問3

正解:エ

解説

(A,B)の2列でのUNIQUE制約は,AとBの値の組合せが表全体で重複しないことを要求します。既存の行には(AA01,BB01)と(AA01,BB02)があるため,UPDATE文でA列をすべて'AA02'に変更すると,2行目の(A,B)が(AA02,BB02)となり,既存の(AA02,BB01)や(AA02,BB03)とは重複しませんが,1行目も(AA02,BB01)に変わり,既存の3行目の(AA02,BB01)と重複してしまい,UNIQUE制約に違反します。

選択肢ごとの解説

  • 誤り。DELETE文は既存の行を削除するだけであり,(A,B)の組合せの一意性を損なうことはないため,UNIQUE制約には違反しません。
  • 誤り。INSERT文で追加される(A,B)は('AA01',NULL)であり,NULLを含む場合は一意性比較の対象とならない(既存の('AA01','BB01')や('AA01','BB02')とは異なる組として扱われる)ため,UNIQUE制約には違反しません。
  • 誤り。INSERT文で追加される(A,B)は(NULL,NULL)であり,NULLを含むため一意性比較の対象とならず,UNIQUE制約には違反しません。
  • 正しい。UPDATE文によってA列がすべて'AA02'に変更されると,1行目の(A,B)が既存の3行目と同じ('AA02','BB01')になってしまい,(A,B)の一意性が失われるため,UNIQUE制約に違反します。
データベーススペシャリストの過去問を演習モードで解く