【さろげーときー】

サロゲートキー とは?

最終更新:
💡 業務の値とは別に、行を区別するIDを用意する

業務上の値とは別に用意する、行を区別するための人工的な識別子。自然キーとの違い、自動採番と制約、業務上の重複チェックを解説します。

📌 このページのポイント
サロゲートキー:業務の値とは別のID変更前id = 42メールold@example.test変更後id = 42メールnew@example.testメールを変更してもIDを保つ設計の例自動採番と、一意制約は別業務上の重複やアクセス権も別に確認
example.testは説明用の架空アドレスです。ID42で同じ行を参照する設計であり、どんな更新でも自動的に固定される意味ではありません。IDを件数やアクセス許可の保証として使いません。
ひよこ ひよこ
サロゲートキーは、どんなID?
ペンギン先生 ペンギン先生
利用者の行にid=42を割り当て、メールアドレスなどの業務上の値とは別に識別する、という使い方だよ。値からその人の名前や業務上の属性を読み取るためのものではないんだ。
ひよこ ひよこ
ナチュラルキーとの違いは?
ペンギン先生 ペンギン先生
業務で既に使う識別値をキーにするか、行の識別用に別の値を設けるかの違いだよ。社員番号などの業務上の値を使う場合は、どの範囲で一意か、変更や再利用があるかも確認する。
ひよこ ひよこ
メールアドレスを変えると、IDも変わる?
ペンギン先生 ペンギン先生
別のIDを保つ設計なら、メールアドレスを変えてもid=42をそのまま使える。他の表はそのIDで同じ行を参照できるよ。IDが自動で永久に固定されるわけではなく、更新や削除のルールも設計する。
ひよこ ひよこ
自動採番にすれば、一意になる?
ペンギン先生 ペンギン先生
生成と制約は分けよう。PostgreSQLのIDENTITYは値を生成するけれど、それだけで一意を保証しない。主キーやUNIQUEで重複を制限する。UUIDも生成方式が複数あり、全部がランダムな文字列という説明ではないよ。
ひよこ ひよこ
IDが違えば、業務上の重複は気にしなくてよい?
ペンギン先生 ペンギン先生
気にする必要がある。id=42と43でも、同じ利用者を二重に登録しているかもしれない。メールアドレスなどを一意にする業務ルールがあるなら、別の制約や確認を用意しよう。サロゲートキーだけでデータの正しさが全部決まるわけではないんだ。
もっと詳しく知りたい人へ

UUIDなら、認証にも使える?

行の識別子と、アクセスを許可する仕組みは別です。IDが分かりにくい値でも、それだけで他人のデータを見られないとは判断できません。利用者の権限を確認する処理を別に設けます。

連番は、1から欠けずに並ぶ?

採番方式や取り消し、削除などによって欠番が出る場合があります。IDを件数や登録順の保証として使わず、その用途の日時や集計を別に持ちます。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「サロゲートキー」って出てきたら「業務上の値とは別に用意する、行を区別するためのID」と思えばだいたいOK!
📖 おまけ:英語の意味
「Surrogate Key」 = 代理のキー
💬 業務上の識別値をそのまま使う代わりに設ける人工的なキーです。「意味がない」は、識別の役割までないという意味ではありません。

参考資料

← 用語集にもどる