ITパスポート 2016年 秋期 問95
問題文
関係データベースにおける主キーに関する記述のうち、適切なものはどれか。
選択肢
ア:主キーに設定したフィールドの値に1行だけならNULLを設定することができる。
イ:主キーに設定したフィールドの値を更新することはできない。
ウ:主キーに設定したフィールドは他の表の外部キーとして参照することができない。
エ:主キーは複数フィールドを組み合わせて設定することができる。(正解)
🔒 解説は解答すると表示されます
関係データベースにおける主キーに関する記述【ITパスポート 解説】
正解の理由
関係データベースの「主キー(primary key:各行を一意に識別するキー)」は、表(テーブル)の各行を一意に特定するためのフィールド(列)です。主キーには「一意性(重複を許さない)」と「非 NULL(NULL を許さない)」という性質があります。一つの行を識別するために複数のフィールドを組み合わせて主キーにすることができます。したがって、複数フィールドを組み合わせて設定できるという記述が正しく、エが正解です。
(補足用語)
- NULL:値が「存在しない」ことを表す特別な値。データが未設定の状態を示します。
- 外部キー(foreign key:他の表の主キーなどを参照するためのフィールド):参照整合性(参照先が存在することを保証する仕組み)に使います。
解法ステップ
- 「主キー」の基本性質を思い出す:
- 一意性(同じ値が2行以上あってはいけない)
- 非 NULL(値が必ず存在する)
- 各選択肢を上の性質と照らし合わせる:
- NULL を許すか? → 主キーは許さない ⇒ アは誤り
- 更新(変更)できるか? → 制約上は可能(ただし注意点あり) ⇒ イは誤り
- 他表の外部キーとして参照できるか? → できる ⇒ ウは誤り
- 複数フィールドの組合せは可能か? → 可能 ⇒ エが正しい
- 正しい性質に最も合う選択肢を選ぶ。
選択肢別の誤答解説
-
ア: 主キーに設定したフィールドの値に1行だけならNULLを設定することができる。
→ 誤り。主キーは「非 NULL」である必要があります。主キーが NULL を許すと、その行を一意に識別できないためです。 -
イ: 主キーに設定したフィールドの値を更新することはできない。
→ 誤り。技術的には主キーの値を UPDATE で変更できます。ただし、主キーが他の表の外部キーで参照されている場合、参照整合性(referential integrity)を保つために制約やトランザクションの配慮が必要です。運用上は主キーを更新しない(変更しづらい)設計が推奨されますが、「できない」という断定は正しくありません。 -
ウ: 主キーに設定したフィールドは他の表の外部キーとして参照することができない。
→ 誤り。むしろ主キーは他の表から外部キーとして参照されることが一般的です。外部キーは主キーを参照して参照整合性を保ちます。 -
エ: 主キーは複数フィールドを組み合わせて設定することができる。
→ 正しい。複数の列を組み合わせた「複合主キー(複合キー、composite key)」が利用できます。例えば「注文ID」と「商品ID」を組み合わせて明細行を一意に識別するケースなどです。
よくある誤解
-
「主キーは絶対に変更できない」
→ 実際は更新可能です。ただし、参照されている場合や業務ルール上の影響が大きいため、変更は避けるべきという運用上の推奨があります。技術的可否と運用上の注意を混同しないようにしましょう。 -
「一意性制約(UNIQUE)と主キーは同じ扱い」
→ 似ていますが違います。主キーは「一意かつ非 NULL」が保証される重要なキーです。一方で UNIQUE 制約は「一意であること」を保証しますが、NULL を許すかどうかの扱いは DBMS によって挙動が異なります(NULL の扱いで混乱しやすい)。 -
「複合主キーは使わない方がいい」
→ 小規模な設計では便利で自然な選択です。運用上や性能・結合(JOIN)の都合で単一の代理キー(オートインクリメントのIDなど)を使うことが多いですが、複合主キーが正しい場面もあります。状況により使い分けます。
補足コラム
-
複合主キー(複合キー)の例:
CREATE TABLE 注文明細 ( 注文ID INT, 商品ID INT, 数量 INT, PRIMARY KEY (注文ID, 商品ID) -- 注文ID と 商品ID を組み合わせて主キー );この場合、同じ注文内で同じ商品が重複して登録されないことを主キーで保証します。 -
代理キー(サロゲートキー、surrogate key)とは:
自然な業務のキー(例:社員番号)が複雑だったり変更される可能性があるときに、システム的に割り振る「ID(例:自動採番の整数)」を主キーにする手法です。利点は単純で参照しやすいこと、欠点は業務上の意味が薄れることです。 -
外部キー制約の注意:
他表の主キーを外部キーで参照している場合、参照先の主キーを削除・変更すると参照整合性違反になります。多くのDBMSではその場合の挙動(CASCADE:連鎖削除や制限など)を設定できます。
FAQ
Q1: 主キーに文字列の組合せを使ってもいいですか?
A1: できます。文字列の複数列を組み合わせて複合主キーにすることは可能です。ただしサイズや検索性能を考えて設計してください。性能面で問題が出る場合は代理キーの検討を。
A1: できます。文字列の複数列を組み合わせて複合主キーにすることは可能です。ただしサイズや検索性能を考えて設計してください。性能面で問題が出る場合は代理キーの検討を。
Q2: UNIQUE 制約と主キー、どちらを使えばいいですか?
A2: 一意性だけを保証したい場合は UNIQUE、かつ「必ず存在し、かつその列で行を特定する」という要件なら主キーを使います。主キーはテーブルに1つだけです。
A2: 一意性だけを保証したい場合は UNIQUE、かつ「必ず存在し、かつその列で行を特定する」という要件なら主キーを使います。主キーはテーブルに1つだけです。
Q3: 主キーに NULL を入れたらどうなる?
A3: 主キーは NULL を許しません。DBMS は主キー列に NULL を格納させない制約を置きます。NULL を許すと一意に識別できないためです。
A3: 主キーは NULL を許しません。DBMS は主キー列に NULL を格納させない制約を置きます。NULL を許すと一意に識別できないためです。
Q4: 主キーを変更したいときはどうする?
A4: 参照関係や業務影響を確認してから行います。参照されている場合は参照整合性を保つための対策(外部キーの ON UPDATE CASCADE など)や、一時的なトランザクションで安全に更新する手続きが必要です。多くの場合、設計段階で変更が少ない値を主キーにする方が楽です。
A4: 参照関係や業務影響を確認してから行います。参照されている場合は参照整合性を保つための対策(外部キーの ON UPDATE CASCADE など)や、一時的なトランザクションで安全に更新する手続きが必要です。多くの場合、設計段階で変更が少ない値を主キーにする方が楽です。
関連キーワード: 主キー、複合主キー、外部キー、NULL、一意制約、参照整合性、DBMS、SQL、代理キー(サロゲートキー)、リレーショナルデータベース

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

