DBデータベーススペシャリスト試験 午前Ⅱ

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

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

商品情報に価格,サイズなどの管理項目を追加する場合でもスキーマ変更を不要とするために,“管理項目”表を次のSQL文で定義した。“管理項目”表の“ID”は商品ごとに付与する。このとき,同じIDの商品に対して,異なる商品名を定義できないようにしたい。aに入れる字句はどれか。 CREATE TABLE 管理項目 ( ID INTEGER NOT NULL, 項目名 VARCHAR(20) NOT NULL, データ型 VARCHAR(10) NOT NULL, 値 VARCHAR(100) NOT NULL, a )
ID,項目名,データ型,値を縦持ちする管理項目表と,商品名,商品番号,価格,サイズを横持ちする商品情報表の例。
ID,項目名,データ型,値を縦持ちする管理項目表と,商品名,商品番号,価格,サイズを横持ちする商品情報表の例。

選択肢

  1. ア
    UNIQUE(ID)
  2. イ
    UNIQUE(ID,項目名)
  3. ウ
    UNIQUE(ID,項目名,値)
  4. エ
    UNIQUE(項目名,値)
解き方のヒントを見る

制約とキーの役割を見分ける視点

表の一意性や表同士の対応を考えるときは、列の値をどの範囲で識別する仕組みか、別表とのつながりを何が支えるかを分けて整理し、各選択肢の用語と保証範囲を照らし合わせます。

この問題で問われていること

一つの列または列の組が行を区別する話と、別の表の行を結び付ける話を混同していないかに絞り、対象となる表・列・関係の向きを確認して、用語が示す保証範囲を比較しましょう。

視点

一意性、参照、制約、キーといった語を、対象の表・列・行の関係に分けて捉えます。各語が示す対象と保証の範囲を整理し、同じ意味として扱ってよいかを慎重に見比べることが重要です。

確認ポイント

  • 対象が一つの表か複数の表かを確認する
  • 識別したい単位が行全体か列の組かを確認する
  • 保証される範囲と関係の向きを選択肢ごとに照合する
正解と解説を見る

正解

イ

解説

管理項目表では、同じ商品に商品名や商品番号、価格など複数の項目を登録する。したがってIDだけでなく項目名との組合せを一意にすることで、同じ商品について同じ項目を重複定義できないようにする。

理由

IDは商品ごとに付与されるため、同じIDの行が複数存在すること自体は想定されている。商品名、商品番号、価格などを行として追加するので、ID単独を一意にすると複数項目を登録できない。

比較

同じIDの商品について同じ項目名を二重に定義できないようにするには、IDと項目名の組合せを重複禁止にする。値を含めると同じ項目名に異なる値を登録できてしまい、項目名だけを対象にすると別商品の同名項目を制限してしまう。

選択肢ア

これは不正解だよ。UNIQUE(ID)では、商品ごとに付与されたIDが表全体で一度しか現れないことになる。しかし公式図のように、同じIDの商品には商品名、商品番号、価格など複数の管理項目を登録する必要があるため、IDだけを一意にする条件は表の構造と合わない。

選択肢イ(正解)

これは正解だよ。UNIQUE(ID,項目名)にすると、同じIDの商品について同じ項目名を持つ行の重複を禁止できる。一方で、項目名が異なれば同じIDの複数行を登録できるため、商品名や商品番号、価格などを管理項目として追加する設計にも適合する。

選択肢ウ

これは不正解だよ。UNIQUE(ID,項目名,値)では三つの列の組合せが重複しないことだけを求める。同じIDと項目名でも値が異なれば別の行を登録できるため、同じ商品に異なる商品名を定義できないという条件を確実には表せない。

選択肢エ

これは不正解だよ。UNIQUE(項目名,値)ではIDを一意性の判定に使わない。そのため、異なる商品で同じ項目名と値を使う場合まで重複として扱うことになり、商品ごとに管理項目を保持する表の設計に適さない。また同じIDの商品名の制約も直接表せない。

学習のポイント

UNIQUE制約で指定する列の組合せと、表が表現するデータ構造を対応させる。

出典:独立行政法人 情報処理推進機構(IPA)平成30年度春期 データベーススペシャリスト試験 午前Ⅱ 問7(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針