IPA過去問ドリル

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

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

商品情報に価格,サイズなどの管理項目を追加する場合でもスキーマ変更を不要とするために,“管理項目”表を次のSQL文で定義した。“管理項目”表の“ID”は商品ごとに付与する。このとき,同じIDの商品に対して,異なる商品名を定義できないようにしたい。aに入れる字句はどれか。 管理項目 ID|項目名|データ型|値 1|商品名|文字列|ライト01 1|商品番号|文字列|L001 1|価格|数値|400 2|商品名|文字列|ノート02 2|(以下省略) 〔商品情報〕 ID|商品名|商品番号|価格|サイズ 1|ライト01|L001|400|(空欄) 2|ノート02|N001|120|A4 (以下省略) 〔SQL文〕 CREATE TABLE 管理項目 ( ID INTEGER NOT NULL, 項目名 VARCHAR(20) NOT NULL, データ型 VARCHAR(10) NOT NULL, 値 VARCHAR(100) NOT NULL, [ a ] ) (注:本サイトでは原問題の表を文字表記に変換しています)

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

正解:イ

解説

EAV(Entity-Attribute-Value)形式で管理される“管理項目”表では,同じIDに対して項目名ごとに1行が作られます。同じIDに対して同じ項目名(例えば“商品名”)の行が複数存在すると,異なる値(異なる商品名)を同じ商品に定義できてしまいます。これを防ぐには,ID と項目名の組合せが重複しないように UNIQUE(ID,項目名)制約を設定すればよく,これによって同じIDの同じ項目名の行は必ず1行に限定されます。

選択肢ごとの解説

  • 誤り。UNIQUE(ID)だけでは,同じIDをもつ行を1行しか許さないことになり,商品名・商品番号・価格など複数の項目を同じIDに対して複数行で管理するというEAV形式の設計自体が成立しなくなります。
  • 正しい。UNIQUE(ID,項目名)とすることで,同じIDに対して同じ項目名(例えば“商品名”)の行は1行しか存在できなくなり,同じ商品に異なる商品名を重複して定義することを防げます。
  • 誤り。UNIQUE(ID,項目名,値)では,同じIDかつ同じ項目名でも値が異なれば別の行として許されてしまうため,同じ商品に異なる商品名を定義できてしまい,防ぎたい状況を防止できません。
  • 誤り。UNIQUE(項目名,値)は商品(ID)をまたいだ組合せの一意性であり,異なる商品同士で同じ項目名・同じ値の組合せを禁止するだけで,同じIDに異なる商品名を定義することを防ぐ制約にはなりません。
データベーススペシャリストの過去問を演習モードで解く