データベーススペシャリスト試験 2018年 午前207


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

解説

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

要点まとめ

  • 結論:同じ商品IDに対して異なる商品名を登録できないようにするには、IDと項目名の組み合わせにUNIQUE制約を付ける必要があります。
  • 根拠:IDは商品ごとに付与され、項目名は「商品名」や「価格」などの管理項目を示すため、IDと項目名の組み合わせが一意であれば商品名の重複登録を防げます。
  • 差がつくポイント:単にIDだけにUNIQUEを付けると管理項目が複数登録できず、ID・項目名・値すべてにUNIQUEを付けると柔軟性が失われるため、IDと項目名の組み合わせが最適です。

正解の理由

イ: UNIQUE(ID, 項目名)が正解です。
商品IDごとに複数の管理項目(価格、サイズ、商品名など)を登録するため、ID単独での一意制約は不適切です。
IDと項目名の組み合わせにUNIQUE制約を付けることで、同じ商品IDに対して同じ項目名が重複登録されることを防ぎます。
これにより、同じIDの商品に異なる商品名(項目名が「商品名」の場合)が登録されることを防止できます。

よくある誤解

IDだけにUNIQUE制約を付けると、1商品につき1つの管理項目しか登録できないと誤解しがちです。
また、値まで含めてUNIQUEにすると、同じ値の管理項目が登録できなくなり柔軟性が損なわれます。

解法ステップ

  1. 問題文から「同じIDの商品に異なる商品名を定義できない」ことを確認する。
  2. 管理項目は「項目名」と「値」のペアで複数登録可能であることを理解する。
  3. ID単独のUNIQUE制約は複数管理項目登録を阻害するため不適切と判断。
  4. IDと項目名の組み合わせにUNIQUE制約を付けることで、同じ商品IDに同じ項目名が重複しないようにする。
  5. よって、UNIQUE(ID, 項目名)が最適な制約であると結論付ける。

選択肢別の誤答解説

  • ア: UNIQUE(ID)
    商品ID単独での一意制約は、1商品につき1つの管理項目しか登録できず、複数の管理項目を持つ設計に合いません。
  • イ: UNIQUE(ID, 項目名)
    正解。商品IDと項目名の組み合わせで一意性を保証し、同じ商品に異なる商品名が登録されるのを防ぎます。
  • ウ: UNIQUE(ID, 項目名, 値)
    値まで含めると、同じ商品ID・項目名で値が異なる場合に重複登録が許されてしまい、商品名の重複防止に不十分です。
  • エ: UNIQUE(項目名, 値)
    商品IDを含まないため、異なる商品間で同じ項目名・値の組み合わせが重複登録できなくなり不適切です。

補足コラム

管理項目を柔軟に追加できる設計は「EAVモデル(Entity-Attribute-Valueモデル)」と呼ばれ、スキーマ変更を避けるために用いられます。
このモデルでは、属性名(項目名)と値を別テーブルで管理し、商品IDと属性名の組み合わせに一意制約を付けることでデータの整合性を保ちます。

FAQ

Q: なぜIDだけにUNIQUE制約を付けてはいけないのですか?
A: IDだけにUNIQUE制約を付けると、1商品につき1つの管理項目しか登録できず、価格やサイズなど複数の属性を管理できなくなるためです。
Q: UNIQUE制約とPRIMARY KEYの違いは何ですか?
A: PRIMARY KEYはテーブル内で一意かつNULLを許さない列の組み合わせで、UNIQUE制約は一意性を保証しますがNULLを許す場合があります。
今回のように複数列の組み合わせで一意性を保証したい場合にUNIQUE制約を使います。

関連キーワード: UNIQUE制約, EAVモデル, スキーマ設計, データ整合性, SQL制約, 管理項目設計
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ