平成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 ]
)- アUNIQUE(ID)
- イUNIQUE(ID,項目名)
- ウUNIQUE(ID,項目名,値)
- エUNIQUE(項目名,値)
答えと解説を見る
✓ これが正解イUNIQUE(ID,項目名)
解説
IDと項目名の組を一意にすれば、1商品に商品名は1行しか持てません。
管理項目表は、商品情報の各項目を、IDと項目名と値の行に分けて縦に持たせる形です。見分ける軸は、どの列の組を一意にすれば、同じIDの商品に商品名が2つ入るのを防げるかです。商品名は、項目名が商品名である行の値として登録されます。そこで、IDと項目名の組にUNIQUEを付けると、ID1の商品名の行は1行しか作れず、異なる商品名を二つ定義することができなくなります。この制約は、商品番号や価格など他の項目にも同じく働き、1商品に各項目の値は一つずつになります。項目を行に分けた表では、IDと項目名の組が元の表の1つの欄にあたる、と考えると選べます。
ほかの選択肢はなぜ違うのか
- アUNIQUE(ID):IDだけを一意にすると、1つのIDにつき1行しか登録できません。商品名・商品番号・価格のように、同じ商品について複数の項目を持たせるという、この表の目的が果たせなくなります。
- ウUNIQUE(ID,項目名,値):ID・項目名・値の3列の組を一意にしても、値が異なれば別の行として登録できます。ID1に商品名ライト01とは別の商品名の行も作れてしまい、異なる商品名を防げません。
- エUNIQUE(項目名,値):項目名と値の組を一意にすると、別の商品どうしで同じ価格を持つことすらできなくなります。一方で、IDを含まないので、同じIDに異なる商品名を登録することは防げません。
出典:平成30年度 春期 データベーススペシャリスト試験 午前Ⅱ 問7
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)