【さろげーときー】

サロゲートキー とは?

💡 意味なんて要らない——純粋に「区別するため」だけに生まれた番号札
📌 このページのポイント
サロゲートキー:システムが自動で振る番号 employees テーブル id (PK) emp_code name 1 EMP-2024-001 田中太郎 2 EMP-2024-002 佐藤花子 AUTO_INCREMENT システムが自動で連番を付与 ナチュラルキー候補 意味あるが変更リスクあり emp_codeが変わってもid=1のまま 外部キー参照が安定する
サロゲートキーの仕組みとメリット
ひよこ ひよこ

サロゲートキーってどういうもの?

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

たとえばユーザーテーブルで「id: 1, 2, 3...」って連番を主キーにするでしょ?あれがサロゲートキーだよ。データの中身とは関係なく、ただ区別するためだけの番号なんだ。

ひよこ ひよこ

ナチュラルキーとの違いは何なの?

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

ナチュラルキーは「社員番号」や「メールアドレス」みたいにデータ自体に意味がある値。サロゲートキーは「1番、2番」みたいに意味がない値。整理券の番号みたいなものだね。

ひよこ ひよこ

意味がないのに何がいいの?

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

安定しているのが最大のメリット。ユーザーがメールアドレスを変更しても、IDは1のまま。外部キーで参照している他のテーブルに影響しないんだよ。

ひよこ ひよこ

UUIDっていうのもサロゲートキーなの?

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

そう!UUIDは「550e8400-e29b-41d4-a716-446655440000」みたいなランダムな文字列で、連番と違って分散システムでも衝突しにくいのが特徴だよ。

ひよこ ひよこ

じゃあ全部サロゲートキーにしちゃえばいいんじゃない?

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

実は多くのフレームワークがそうしてるよ。ただ、キー値だけ見ても何のデータか分からないから、デバッグ時に「id: 42857って誰?」ってなりがち。ナチュラルキーとの使い分けが設計の腕の見せどころだね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「サロゲートキー」って出てきたら「システムが自動で振る意味のないID番号」と思えればだいたいOK!
📖 おまけ:英語の意味
「Surrogate Key」 = 代理キー
💬 「surrogate(代理人)」が本来のキーの代わりを務めるから「サロゲートキー」だよ
← 用語集にもどる