ホーム > データベーススペシャリスト試験 > 2017年
データベーススペシャリスト試験 2017年 午前2 問11
PCへのメモリカードの取付け状態を管理するデータモデルを作成した。1台のPCは, スロット番号によって識別されるメモリカードスロットを二つ備える。“取付け”表を定義するSQL文のaに入る適切な制約はどれか。ここで, モデルの表記にはUMLを用いる。

ア:
PRIMARY KEY (PCID, スロット番号),
イ:
PRIMARY KEY (PCID, スロット番号, メモリカード ID),
ウ:
PRIMARY KEY (PCID, スロット番号),
UNIQUE (メモリカード ID),
(正解)エ:
PRIMARY KEY(スロット番号, メモリカード ID),
UNIQUE (PCID),
解説
PCへのメモリカードの取付け状態を管理するデータモデル作成【午前2 解説】
要点まとめ
- 結論:取付け表の主キーは「PCIDとスロット番号の複合キー」とし、メモリカードIDは一意制約を付けるのが正解です。
- 根拠:1台のPCはスロット番号で識別される2つのスロットを持ち、各スロットに1枚のメモリカードが取付けられるため、PCID+スロット番号で行を特定し、メモリカードIDは重複不可です。
- 差がつくポイント:主キーとユニーク制約の使い分けを理解し、UMLの多重度(カーディナリティ)を正確にSQL制約に反映できるかが重要です。
正解の理由
選択肢ウは「PRIMARY KEY (PCID, スロット番号)」で、PCごとにスロット番号1または2の組み合わせで一意に行を特定します。さらに「UNIQUE (メモリカードID)」で、メモリカードIDが複数のスロットに重複して取付けられないことを保証しています。UMLの多重度「PC側1、取付け側0..2」「取付け側0..1、メモリカード側1」に合致し、正しい制約設計です。
よくある誤解
主キーにメモリカードIDを含めると、同じPCの同じスロットに複数のメモリカードが登録可能と誤解しがちです。ユニーク制約と主キーの役割を混同しないことが重要です。
解法ステップ
- UMLの多重度を確認し、PCと取付けの関係は「1対0..2」でPCID+スロット番号で一意に特定可能と判断。
- 取付けとメモリカードの関係は「0..1対1」で、メモリカードは1つの取付けにしか属さないため、メモリカードIDは重複不可。
- SQLの主キーは「PCIDとスロット番号の複合キー」とし、メモリカードIDはユニーク制約を付ける。
- 選択肢を比較し、主キーとユニーク制約の組み合わせが正しいものを選択。
選択肢別の誤答解説
- ア: 主キーが「PCIDとスロット番号」だけでメモリカードIDの重複を防げないため不十分。
- イ: 主キーにメモリカードIDを含めると、同じPCの同じスロットに複数のメモリカードが登録可能になり誤り。
- ウ: 主キーとユニーク制約の使い分けが正しく、UMLの多重度を正確に反映している。
- エ: 主キーにスロット番号とメモリカードIDを使い、PCIDがユニークなのはUMLの関係と矛盾し誤り。
補足コラム
UMLの多重度はデータベース設計で重要な指標です。1対多の関係では多側の識別子に外部キーを持たせ、複合主キーで一意性を保証します。また、ユニーク制約は主キー以外の列の重複を防ぐために使い分けます。これにより、データの整合性を保ちつつ柔軟な設計が可能です。
FAQ
Q: なぜメモリカードIDを主キーに含めてはいけないのですか?
A: メモリカードIDを主キーに含めると、同じPCの同じスロットに複数のメモリカードが登録可能になり、UMLの多重度と矛盾します。
A: メモリカードIDを主キーに含めると、同じPCの同じスロットに複数のメモリカードが登録可能になり、UMLの多重度と矛盾します。
Q: UNIQUE制約とPRIMARY KEYの違いは何ですか?
A: PRIMARY KEYはテーブルの行を一意に識別しNULLを許さない制約、UNIQUEは重複を禁止するがNULLを許す場合もあります。
A: PRIMARY KEYはテーブルの行を一意に識別しNULLを許さない制約、UNIQUEは重複を禁止するがNULLを許す場合もあります。
関連キーワード: SQL制約, 複合主キー, ユニーク制約, UML多重度, 外部キー制約, データベース設計