戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

ITパスポート 2014年 春期 64


問題文

関係データベースの主キーに関する記述のうち、適切なものはどれか。

選択肢

各表は、主キーだけで関係付ける。
主キーの値として、同一のものがあってもよい。
主キーの値として、NULLをもつことができない。(正解)
複数の列を組み合わせて主キーにすることはできない。

🔒 解説は解答すると表示されます

関係データベースの主キーに関する記述【ITパスポート 解説】

正解の理由

関係データベース(relational database:表でデータを管理する仕組み)における主キー(primary key:表の行を一意に識別するための列)は、各行(レコード)を他と区別するための値です。主キーには「一意性(同じ値が複数行に存在しない)」と「非NULL(値が必ず存在する)」という性質が必要です。したがって、選択肢「主キーの値として、NULLをもつことができない。」が正しい説明です。NULL(値が存在しないことを示す特別な表現)は「その行が何であるか」を特定できないため、主キーには使えません。

解法ステップ

  1. 問題文で問われている用語(主キー、NULL、複数列)を確認する。
    • 主キー=行を一意に識別する列。
    • NULL=値が「存在しない」「不明」を表す特別な状態。
  2. 主キーに必要な性質を思い出す:一意性と非NULL。
  3. 各選択肢がその性質に合うかを当てはめて検証する。
  4. 「主キーはNULLを持てない」が成り立つので、その選択肢を選ぶ。
短く言えば、「行を確実に識別するためには値が必ず存在し、かつ他の行と重複してはならない」ことを基準に考えます。

選択肢別の誤答解説

  • ア: 各表は、主キーだけで関係付ける。
    誤り。表どうしの関係付け(結合)は通常、主キーと外部キー(foreign key:他の表の主キーを参照する列)で行いますが、「主キーだけで必ず関係付ける」と断言するのは間違いです。設計によっては別の列や複合キー、あるいは中間表を使う場合もあります。
  • イ: 主キーの値として、同一のものがあってもよい。
    誤り。主キーは「一意」である必要があり、同じ値が複数行に存在してはいけません。もし同じ値を許すなら、それは主キーではなくなります。
  • ウ: 主キーの値として、NULLをもつことができない。
    正解。主キーは行を確実に識別するため「NULL(値がない/不明)」を許しません。したがって主キー列は常に値を持ち、NULLは不可です。
  • エ: 複数の列を組み合わせて主キーにすることはできない。
    誤り。複数の列を組み合わせて主キーにする「複合主キー(composite key)」は一般的に許されます。例えば(社員番号, 部署コード)の組み合わせで一意に行が決まるなら、それらを複合主キーにできます。

よくある誤解

  1. NULLと空文字("")や0を同じだと考える誤解。
    • NULLは「値が存在しない/不明」で、空文字や0は「値が存在している」状態です。識別の観点で主キーには空文字や0も避けるべきですが、NULLとは意味が違います。
  2. 一意制約(UNIQUE)と主キー(PRIMARY KEY)を混同する誤解。
    • UNIQUEは「重複禁止」を意味しますが、DBMSによってNULLの扱いが異なる場合があります。一方、PRIMARY KEYは「重複禁止+NULL不可」が原則です。
  3. 「複合主キーは使うべきでない」との先入観。
    • 設計次第で複合主キーは有効です。ただし扱いやすさから代理キー(サロゲートキー:自動採番など)を使うことも多いです。

補足コラム

  • 複合主キーとサロゲートキー:
    複合主キーは実務でよく使われますが、アプリやクエリで扱いにくくなることがあります。そこで代わりに「サロゲートキー(surrogate key:意味のない自動採番ID)」を主キーにし、本来の複数列はユニーク制約にする設計も一般的です。
  • UNIQUE制約とNULLの扱い:
    SQL標準や各DBMS(例:MySQL、PostgreSQL、Oracle、SQL Server)でNULLの扱いが微妙に異なります。主キーはどのDBMSでもNULLを許容しない点は共通です。
  • 主キーはインデックスになる:
    多くのDBMSでは主キーを設定すると自動的に索引(インデックス)が作られ、検索が高速になります。これも主キーが重要な理由の一つです。
簡単な例(SQL)
-- 単一列の主キー(NULL不可)
CREATE TABLE employees (
  emp_id INT PRIMARY KEY,
  name VARCHAR(100)
);

-- 複合主キーの例
CREATE TABLE assignments (
  emp_id INT,
  project_id INT,
  PRIMARY KEY (emp_id, project_id)
);

FAQ

Q1: NULLと空文字はどう違いますか?
A1: NULLは「値が存在しない/不明」です。空文字("")は「値が存在しているが中身が空」です。両者はデータ上で別物です。
Q2: 主キーは必ず1列だけですか?
A2: いいえ。複数列を組み合わせて「複合主キー」にすることができます。ただし運用やプログラムの都合で単一の代理キーを利用することも多いです。
Q3: UNIQUE制約とPRIMARY KEYの違いは?
A3: PRIMARY KEYは「一意性+NULL不可」でテーブルに1つだけ設定します。UNIQUEは「一意性のみ」で、NULLの扱いはDBMSにより動作が異なる場合があります。
Q4: なぜ主キーにNULLを許さないのですか?
A4: NULLは「不明」を意味するため、ある行を確実に特定できなくなります。主キーは「確実に識別する」ために必ず値が必要です。

関連キーワード: 主キー、関係データベース、NULL、一意性、複合主キー、外部キー、ユニーク制約
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポート
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について