【しゅきー】

主キー とは?

💡 テーブルの各行を「唯一識別する」カラム、重複もNULLも禁止
📌 このページのポイント
主キー(Primary Key)の役割 🔑 id 名前 メール 1 田中太郎 tanaka@example 2 鈴木花子 suzuki@example 3 佐藤次郎 sato@example 主キー 一意性 値が重複しない NOT NULL 空値を許可しない 行の識別子 各行を特定できる 主キーにより各レコードを一意に特定できる
主キーのイメージ
ひよこ ひよこ

主キーって何のためにあるの?

ペンギン先生 ペンギン先生

テーブルの各行を一意に特定するため。「user_idが1のユーザー」というように、主キーがあればどのレコードを指しているか必ず特定できる。主キーがないと「同名の田中さんが複数いるときどちらを更新するか」が曖昧になる。

ひよこ ひよこ

AUTO_INCREMENTってよく見るけど?

ペンギン先生 ペンギン先生

新しいレコードを追加するたびに自動で1・2・3・...と連番を振ってくれる設定。「id」カラムをINTのAUTO_INCREMENTにして主キーにするのが最もシンプルで一般的なパターン。

ひよこ ひよこ

外部キーとの関係は?

ペンギン先生 ペンギン先生

テーブルの主キーを参照する制約が「外部キー(FOREIGN KEY)」。例えばordersテーブルの「user_id」がusersテーブルのid(主キー)を参照する外部キーなら、存在しないuser_idのオーダーは作れない(参照整合性)。

ひよこ ひよこ

UUIDを主キーにするのってどうなの?

ペンギン先生 ペンギン先生

UUIDは128ビットのランダムな値で、分散システムでIDの重複を避けたいときに便利だよ。ただし連番より長いからインデックスのサイズが大きくなり、INSERT時のパフォーマンスが劣る場合がある。ULIDやSnowflakeのように時系列ソートが可能なIDフォーマットを選ぶ手もあるよ。

ひよこ ひよこ

複合主キーってどういうときに使うの?

ペンギン先生 ペンギン先生

2つ以上のカラムを組み合わせて主キーにすること。例えば「受講テーブル」で「学生ID + 講義ID」を複合主キーにすれば、「同じ学生が同じ講義に2回登録する」のを防げる。ただし外部キーで参照するときに複数カラムを指定する必要があって複雑になるから、実務ではサロゲートキー(自動採番のid)+ユニーク制約の組み合わせのほうが好まれることが多いよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
主キーって出てきたら「テーブルの各行を一意に識別するカラム、重複・NULLなし必須」と思えばOK!
📖 おまけ:英語の意味
「Primary Key」 = 主要な(Primary)鍵(Key)
💬 リレーショナルデータベースの基本概念。E.F.Coddがリレーショナルモデルを提唱した際に定義した概念の一つ
← 用語集にもどる