基本情報技術者 2009年 秋期 午前(科目A) 問32
問題文
関係データベースの主キーの性質として、適切なものはどれか。
選択肢
ア:主キーとした列に対して検索条件を指定しなければ、行の検索はできない。
イ:数値型の列を主キーに指定すると、その列は算術演算の対象としては使えない。
ウ:一つの表の中に、主キーの値が同じ行が複数存在することはない。(正解)
エ:複数の列からなる主キーを構成することはできない。
関係データベースの主キーの性質【午前2 解説】
要点まとめ
- 結論:主キーは表内で行を一意に識別する制約であり、同一の値が複数行に存在できず通常NULLを許容しません。
- 根拠:関係モデルの定義とSQLの仕様では、主キーは一意性(ユニーク性)と最小性を満たす属性集合でありPRIMARY KEYは暗黙にNOT NULLを伴います。
- 差がつくポイント:複合主キーや代理キー(シーケンスやUUID)の使い分け、UNIQUE制約との違いやNULL扱いを設計段階で明確にすることが重要です。
正解の理由
正解は ウ です。主キーの本質は「表内で各行を一意に識別する」ことであり、同じ主キー値を持つ行が複数存在することは許されません。リレーショナルデータベースではPRIMARY KEYにより一意性制約が強制され、実装上も重複する行の挿入はエラーになります。
よくある誤解
- 「主キーがなければ検索できない」は誤りで、主キー以外の列にインデックスや検索条件を使えば検索可能です。
- 「数値型は算術演算に使えない」は誤解で、データ型の性質は主キー指定で失われません。
解法ステップ
- 主キー(primary key)の定義を思い出す:一意性と非NULL(通常)を満たす。
- 各選択肢を主キー定義と照らし合わせる:一意性を主張している選択肢を探す。
- 明らかに誤りの選択肢(検索可否やデータ型制限、複合不可)を順に除外する。
- 残った「一意性」を述べる選択肢を正答として確定する。
選択肢別の誤答解説
- ア: 誤り。主キーがなくても、他の列で検索したりインデックスを作成したりすれば行の検索は可能です。
- イ: 誤り。数値型を主キーにしても算術演算に使えないという制約はありません。主キー指定は型の算術性を変えません。
- ウ: 正解。主キー値が同じ行が複数存在することは一意性制約に反するため許されません。
- エ: 誤り。複数列からなる複合主キー(複合PRIMARY KEY)は標準的に可能で、複数属性の組合せで一意性を保証できます。
補足コラム
- 主キーとUNIQUE制約の違い:UNIQUEはNULLを許す場合がある点で主キーと挙動が異なることがあります(DB製品や設定による差あり)。
- 代理キー(サロゲートキー):自然キーが長い・変わりやすい場合、シーケンスやUUIDで代理キーを用いる設計が一般的です。
- SQLでの定義例:
-- 単一列の主キー CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100) ); -- 複合主キー CREATE TABLE enrollment ( student_id INT, course_id INT, PRIMARY KEY (student_id, course_id) );
FAQ
Q: 主キーと候補キーはどう違いますか?
A: 候補キーは表の中で一意性を満たす属性集合のうちの候補群で、そこから一つを選んだものが主キー(PRIMARY KEY)になります。
A: 候補キーは表の中で一意性を満たす属性集合のうちの候補群で、そこから一つを選んだものが主キー(PRIMARY KEY)になります。
Q: 主キーは必ず1列ですか?
A: いいえ。複数列を組み合わせた複合主キーは標準で認められており、設計要件により使い分けます。
A: いいえ。複数列を組み合わせた複合主キーは標準で認められており、設計要件により使い分けます。
関連キーワード: RDBMS、主キー、一意性制約(UNIQUE)、NOT NULL、複合主キー、代理キー、シーケンス、UUID、PRIMARY KEY、データベース設計

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

