ITパスポート 2014年 春期 問64
問題文
関係データベースの主キーに関する記述のうち、適切なものはどれか。
選択肢
ア:各表は、主キーだけで関係付ける。
イ:主キーの値として、同一のものがあってもよい。
ウ:主キーの値として、NULLをもつことができない。(正解)
エ:複数の列を組み合わせて主キーにすることはできない。
🔒 解説は解答すると表示されます
関係データベースの主キーに関する記述【ITパスポート 解説】
正解の理由
関係データベース(relational database:表でデータを管理する仕組み)における主キー(primary key:表の行を一意に識別するための列)は、各行(レコード)を他と区別するための値です。主キーには「一意性(同じ値が複数行に存在しない)」と「非NULL(値が必ず存在する)」という性質が必要です。したがって、選択肢ウ「主キーの値として、NULLをもつことができない。」が正しい説明です。NULL(値が存在しないことを示す特別な表現)は「その行が何であるか」を特定できないため、主キーには使えません。
解法ステップ
- 問題文で問われている用語(主キー、NULL、複数列)を確認する。
- 主キー=行を一意に識別する列。
- NULL=値が「存在しない」「不明」を表す特別な状態。
- 主キーに必要な性質を思い出す:一意性と非NULL。
- 各選択肢がその性質に合うかを当てはめて検証する。
- 「主キーはNULLを持てない」が成り立つので、その選択肢を選ぶ。
短く言えば、「行を確実に識別するためには値が必ず存在し、かつ他の行と重複してはならない」ことを基準に考えます。
選択肢別の誤答解説
-
ア: 各表は、主キーだけで関係付ける。
誤り。表どうしの関係付け(結合)は通常、主キーと外部キー(foreign key:他の表の主キーを参照する列)で行いますが、「主キーだけで必ず関係付ける」と断言するのは間違いです。設計によっては別の列や複合キー、あるいは中間表を使う場合もあります。 -
イ: 主キーの値として、同一のものがあってもよい。
誤り。主キーは「一意」である必要があり、同じ値が複数行に存在してはいけません。もし同じ値を許すなら、それは主キーではなくなります。 -
ウ: 主キーの値として、NULLをもつことができない。
正解。主キーは行を確実に識別するため「NULL(値がない/不明)」を許しません。したがって主キー列は常に値を持ち、NULLは不可です。 -
エ: 複数の列を組み合わせて主キーにすることはできない。
誤り。複数の列を組み合わせて主キーにする「複合主キー(composite key)」は一般的に許されます。例えば(社員番号, 部署コード)の組み合わせで一意に行が決まるなら、それらを複合主キーにできます。
よくある誤解
-
NULLと空文字("")や0を同じだと考える誤解。
- NULLは「値が存在しない/不明」で、空文字や0は「値が存在している」状態です。識別の観点で主キーには空文字や0も避けるべきですが、NULLとは意味が違います。
-
一意制約(UNIQUE)と主キー(PRIMARY KEY)を混同する誤解。
- UNIQUEは「重複禁止」を意味しますが、DBMSによってNULLの扱いが異なる場合があります。一方、PRIMARY KEYは「重複禁止+NULL不可」が原則です。
-
「複合主キーは使うべきでない」との先入観。
- 設計次第で複合主キーは有効です。ただし扱いやすさから代理キー(サロゲートキー:自動採番など)を使うことも多いです。
補足コラム
-
複合主キーとサロゲートキー:
複合主キーは実務でよく使われますが、アプリやクエリで扱いにくくなることがあります。そこで代わりに「サロゲートキー(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は「値が存在しない/不明」です。空文字("")は「値が存在しているが中身が空」です。両者はデータ上で別物です。
A1: NULLは「値が存在しない/不明」です。空文字("")は「値が存在しているが中身が空」です。両者はデータ上で別物です。
Q2: 主キーは必ず1列だけですか?
A2: いいえ。複数列を組み合わせて「複合主キー」にすることができます。ただし運用やプログラムの都合で単一の代理キーを利用することも多いです。
A2: いいえ。複数列を組み合わせて「複合主キー」にすることができます。ただし運用やプログラムの都合で単一の代理キーを利用することも多いです。
Q3: UNIQUE制約とPRIMARY KEYの違いは?
A3: PRIMARY KEYは「一意性+NULL不可」でテーブルに1つだけ設定します。UNIQUEは「一意性のみ」で、NULLの扱いはDBMSにより動作が異なる場合があります。
A3: PRIMARY KEYは「一意性+NULL不可」でテーブルに1つだけ設定します。UNIQUEは「一意性のみ」で、NULLの扱いはDBMSにより動作が異なる場合があります。
Q4: なぜ主キーにNULLを許さないのですか?
A4: NULLは「不明」を意味するため、ある行を確実に特定できなくなります。主キーは「確実に識別する」ために必ず値が必要です。
A4: NULLは「不明」を意味するため、ある行を確実に特定できなくなります。主キーは「確実に識別する」ために必ず値が必要です。
関連キーワード: 主キー、関係データベース、NULL、一意性、複合主キー、外部キー、ユニーク制約

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

