平成24年 秋期 応用情報技術者 午前 問28

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

 ア  DELETE FROM R WHERE A = ‘AA01’ AND B = ‘BBO2’
 イ  INSERT INTO R(A, B, C, D) VALUES (‘AAO1’, NULL, ‘DDO1’, ‘EE0l’)
 ウ  INSERT INTO R(A, B, C, D) VALUES (NULL, NULL, ‘AAO1’, ‘BB02’)
 エ  UPDATE R SET A = ‘AAO2’ WHERE A = ‘AAO1’


答え エ


解説

 ア  DELETE FROM R WHERE A = ‘AA01’ AND B = ‘BBO2’は、表の3行目を削除するSQL文であるが、これを行ってもUNIQUE制約には違反しない。
A B C D
AA01 BB01 CC01 DD01
AA02 BB01 NULL DD03
AA02 BB03 NULL NULL
 イ  INSERT INTO R(A, B, C, D) VALUES (‘AAO1’, NULL, ‘DDO1’, ‘EE0l’)は、データの追加を行うSQL文であるが、これを行ってもUNIQUE制約には違反しない。
A B C D
AA01 BB01 CC01 DD01
AA01 BB02 CC02 NULL
AA02 BB01 NULL DD03
AA02 BB03 NULL NULL
AA01 NULL DD01 EE01
 ウ  INSERT INTO R(A, B, C, D) VALUES (NULL, NULL, ‘AAO1’, ‘BB02’)は、データの追加を行うSQL文であるが、これを行ってもUNIQUE制約には違反しない。
A B C D
AA01 BB01 CC01 DD01
AA01 BB02 CC02 NULL
AA02 BB01 NULL DD03
AA02 BB03 NULL NULL
NULL NULL AA01 BB02
 エ  UPDATE R SET A = ‘AAO2’ WHERE A = ‘AAO1’を行うと、表の2行目と4行目のAとBが同じ値になり、UNIQUE制約に違反します。
A B C D
AA02 BB01 CC01 DD01
AA02 BB02 CC02 NULL
AA02 BB01 NULL DD03
AA02 BB03 NULL NULL


キーワード
・整合性制約

キーワードの解説
  • 整合性制約
    データベースを常に正しい状態に保つために規則です。
    整合性制約には、
    • 一意性制約
      追加、更新する際、列あるいは列のグループに含まれるデータが、テーブル内のすべての行で一意でなければならない。
    • 参照制約
      複数のテーブルを利用して他のテーブルの値を参照する場合、参照するタプルが必ず存在しなければならない。
    • 定義域制約
      属性の値が原子値(これ以上細分化できない単純な値)でなければならない。
    • 表検査制約
      データ挿入又は更新時に条件を満たさないデータの場合は操作を抑止しなければならない。
    などがあります。

もっと、「整合性制約」について調べてみよう。

戻る 一覧へ 次へ