関係データベースの主キーに関する記述のうち, 適切なものはどれか。
平成26年度 春期 ITパスポート試験 問64
この問題の解説と、これまでの解答の記録です。
問 64
不正解ア
表と表を関係付ける (結び付ける) 役割を担うのは、他の表の主キーを参照する外部キー (foreign key) です。主キーは自分の表の行を一意に識別するための列であって、関係付けそのものは「外部キー → 主キー」という参照によって成立します。また実務上は主キー以外の列どうしで結合 (join) することもでき、「主キーだけで関係付ける」という限定は成り立ちません。
不正解イ
主キーには一意性の制約があり、同一の値が複数行に存在してはいけません。もし重複を許すと、その値を指定したときに行が 1 つに定まらず、行を一意に特定するという主キーの目的が崩れます。重複してよいのは主キーではない一般の列 (および外部キー列) です。
- ウ
正解 主キー (primary key) は、表の中の 1 行 (レコード) を他と区別して一意に特定するための列 (または列の組) です。行を確実に見分けるという役割を果たすため、主キーには次の 2 つの制約が課されます。(1) 一意性 — 同じ値が 2 行以上に現れてはならない。(2) 非 NULL (実体整合性) — 値が空 (NULL = 値が存在しない/不明) であってはならない。NULL は「値が分からない」という状態を表すので、主キーが NULL だとその行を特定する手掛かりが失われ、主キー本来の目的が果たせなくなります。したがって「主キーの値として, NULL をもつことができない」と述べたウが適切です。
不正解エ
1 列だけでは行を一意に識別できない場合、複数の列を組み合わせて主キーとすることができます。これを複合キー (複合主キー) と呼び、例えば「注文番号 + 明細行番号」のような組合せで一意性を確保します。よって「複数の列を組み合わせて主キーにすることはできない」は誤りです。
- 主キーの 2 大制約 — 一意性 (同じ値の重複不可) と非 NULL (空値不可)。この 2 つを満たすことで表の中の 1 行を確実に特定できる。
- 主キーと外部キーの役割分担 — 主キーは自表の行の一意識別、表どうしの関係付けは他表の主キーを参照する外部キーが担う。また 1 列で足りなければ複数列を束ねた複合キーにできる。