EAVモデルにおける複合UNIQUE制約の定義

正解は「イ」です。 問題の表構造は、属性を縦持ち(行形式)で格納するEAV(Entity-Attribute-Value)モデルです。 設問では「同じIDの商品に対して,異なる商品名を定義できないようにしたい」、すなわち「同一のIDに対して、同じ項目名(商品名)が複数登録されることを防ぎたい」という要件が示されています。 同一商品(ID)に対して各属性(項目名)が1行しか存在できないようにするには、(ID, 項目名) の組合せに対して一意性制約(UNIQUE制約)を付与します。したがって、  a  には UNIQUE (ID, 項目名) を指定します。 UNIQUE (ID) を設定すると、1つのIDに対して表全体で1行しか登録できなくなり、商品名以外の項目(商品番号や価格など)を同じ商品に追加できなくなってしまいます。 UNIQUE (ID, 項目名, 値) とすると、値が異なれば同じ (ID, 項目名) の行が複数登録可能となるため、「同一商品に異なる商品名が2つ登録される」状態を防止できません。 UNIQUE (項目名, 値) とすると、異なる商品(異なるID)の間で同じ商品名や同じ価格を登録できなくなってしまい、一般的な商品の管理として不適切です。

商品情報に価格,サイズなどの管理項目を追加する場合でもスキーマ変更を不要とするために,“管理項目”表を次のSQL文で定義した。“管理項目”表の“ID”は商品ごとに付与する。このとき,同じIDの商品に対して,異なる商品名を定義できないようにしたい。 a に入れる字句はどれか。

管理項目

〔商品情報〕

〔SQL文〕

sql
CREATE TABLE 管理項目(
 ID INTEGER NOT NULL,
 項目名 VARCHAR(20) NOT NULL,
 データ型 VARCHAR(10) NOT NULL,
 値 VARCHAR(100) NOT NULL,
  a 
)
出典平成30年春期 午前Ⅱ
ア
UNIQUE (ID)
イ
UNIQUE (ID, 項目名)
ウ
UNIQUE (ID, 項目名, 値)
エ
UNIQUE (項目名, 値)