FE EXAM

主キー(レコードを一意識別する列)

表の中で各レコードを一意に識別するための列。

DIAGRAM
主キー(PK)
一般の列
主キー(社員番号)の値が決まれば、行が1つに特定できる社員番号 🔑氏名所属部署入社年101田中 太郎営業部2018102鈴木 花子開発部2020103佐藤 次郎営業部2018104高橋 三郎総務部2021値が空(NULL)禁止・重複禁止「103」を指定 → 佐藤次郎の行に1つだけ決まる
解説

📌
主キーとは

キーの値で行が1つに決まるID 🔑氏名101田中102鈴木103佐藤

主キー(プライマリキー)とは、表の中で各レコード(1行)を一意に識別するための列です。「一意に識別する」とは、その値を指定すれば対象の行がただ1つに決まる、という意味です。

身近な例で考えると、マイナンバーや学籍番号に似ています。氏名は同姓同名がいて区別できないことがありますが、学籍番号なら必ず1人に決まります。表でも同じで、社員番号や会員番号のような重複しない列を主キーに選びます。

上の図解では、主キー「社員番号」の値(例:103)を指定すると、対応する行(佐藤次郎)が1つだけ特定される様子を示しています。主キーは1つの表に1つだけ設定でき、表の各行を確実に区別する役割を担います。

📌
制約(NOT NULL・UNIQUE)

空・重複があると主キーになれないOK101102103NG101101 ←重複(空) ←NULL

主キーに選ばれた列には、自動的に2つの制約(守らなければならないルール)が課されます。
NOT NULL(ノットヌル):値が空(NULL)であってはならない
UNIQUE(ユニーク):同じ値が2つ以上あってはならない(重複禁止)

この2つが必要な理由はシンプルです。もし値が空だと「どの行か」を指定できず、値が重複していると「同じ番号の行が2つ」になって1つに絞り込めません。つまり、空も重複もないからこそ、主キーは行を確実に1つに特定できるのです。

身近な例で考えると、クラスの出席番号に似ています。出席番号は必ず全員に割り当てられ(空がない)、同じ番号の人は2人いません(重複がない)。だからこそ「3番」と言えば1人に決まるのです。

📌
複合主キー — 2列以上を組み合わせて1つの主キーにする

注文明細テーブル(複合主キーの例)注文番号🔑商品ID🔑数量001P012001P021002P0152列の組み合わせが主キー

複合主キーとは、2つ以上の列を組み合わせて1つの主キーとして使う仕組みです。単独の列では重複が生じるが、組み合わせれば一意になる場合に使います。

上の例では「注文明細テーブル」で、注文番号だけでは「どの商品か」が決まらず、商品IDだけでは「どの注文か」が決まりません。しかし「注文番号+商品ID」の組み合わせなら、001の注文のP01という行が1つに決まります。

なぜ複合主キーが必要か。EC(ネットショッピング)の注文のように、「1つの注文に複数の商品がある」という関係を表すとき、1行で1つの「注文×商品のペア」を表す表が必要になります。この表には商品を一意に識別できる単独の列がないため、2列を組み合わせて主キーにします。

注意点として、複合主キーを構成するどの列も NULL(空)が許されません。また、第2正規形(2NF)の観点からは「複合主キーの一部だけで決まる列があってはいけない」というルールが出てくるため、正規化と密接に関係しています。

📌
主キーの選び方 — 自然キーと代理キー

種類意味特徴
自然キー業務上の意味を持つ列マイナンバー、社員番号意味が分かりやすい。変更される可能性あり
代理キー識別のためだけに付けた連番user_id: 1,2,3…変わらない・シンプル。意味は持たない

主キーの値をどの列から選ぶかには、大きく2つの考え方があります。

自然キー(ナチュラルキー)は、業務上もともと意味を持つ列を使います。「社員番号」「商品コード」などです。人が見ただけで「何のIDか」が分かる利点がありますが、制度の変更で値が変わる可能性がある点が弱点です(例:社員番号の採番ルール変更)。

代理キー(サロゲートキー)は、識別だけを目的に自動的に付けた連番(1、2、3…)です。業務の意味は持ちませんが、値が変わることがなく、常に一意・シンプルであることが利点です。

身近な例で考えると、図書館の本棚番号(代理キー)と本のISBN(自然キー)の違いに似ています。どちらも1冊を特定できますが、棚番号は図書館が自由に付け直せる一方、ISBNは出版社が決めた番号で意味があります。どちらが「より良い主キーか」は設計の方針によります。

📌
候補キーとの関係

候補キーの中から1つを主キーに選ぶ社員番号マイナンバー候補キー(一意に識別できる列)主キーに選定

1つの表の中に、レコードを一意に識別できる列が複数あることもあります。たとえば社員表では「社員番号」でも「マイナンバー」でも1人に特定できます。このように一意に識別できる列(または列の組み合わせ)を候補キーと呼びます。

主キーは、その候補キーの中から代表として1つ選んだものです。
候補キー:一意に識別できる列の候補(複数あってよい)
主キー:候補キーの中から1つ選んだ正式な識別列
代替キー:候補キーのうち主キーに選ばれなかったもの

身近な例で考えると、クラス委員を選ぶ場面に似ています。委員になれる資格のある人(候補キー)が何人かいて、その中から1人を正式な委員(主キー)に決める、というイメージです。短くて扱いやすい列を主キーに選ぶのが一般的です。

練習問題

🎯
基本情報技術者 練習問題

Q1.主キーの説明として最も適切なものはどれか。
A.他の表を参照するための列
B.表の中で各レコードを一意に識別するための列
C.データを暗号化するための鍵
D.検索を速くするための索引
Q2.主キーに設定された列が満たさなければならない制約はどれか。
A.値が空(NULL)でもよく、重複も許される
B.値が空(NULL)であってはならず、かつ重複してはならない
C.必ず数値でなければならない
D.必ず複数の列を組み合わせなければならない
Q3.主キーと候補キーの関係の説明として最も適切なものはどれか。
A.主キーと候補キーはまったく無関係である
B.候補キーは主キーを参照する列のことである
C.一意に識別できる候補キーが複数あるとき、その中から1つ選んだものが主キーである
D.主キーは候補キーを2つ以上組み合わせたものである

関連コンテンツ