データベース設計・開発

自然キーと代理キー しぜんきーとだいりきー

自然キー代理キー主キー設計UUID連番IDデータモデリング
主キーって何を使うのがいいの?

簡単に言うとこんな感じ!

主キーには「業務上意味を持つ値(自然キー)」を使う方法と「DBが勝手に採番する番号(代理キー)」を使う方法があるよ!一般的には代理キー(連番のIDやUUID)の方が安全で変更しやすいから、現代の設計では代理キーが主流なんだ。


自然キーと代理キーとは

種類内容
自然キー(Natural Key)データが元々持っている業務上の識別子メールアドレス・マイナンバー・ISBN
代理キー(Surrogate Key)DBが自動生成した意味を持たない識別子連番(1,2,3…)・UUID

自然キーの問題点

自然キーには以下のリスクがあります:

問題内容
変更可能性メールアドレスは変わる。変更のたびに全テーブルを更新
非ユニーク性電話番号は重複することがある
外部依存マイナンバー等は外部システムの仕様変更で影響を受ける
機密性主キーがURLに出ると個人情報が露出する
文字列結合文字列のPKは整数より結合が遅い

代理キーの種類

種類内容メリットデメリット
連番(AUTO INCREMENT)1, 2, 3, 4…シンプル・小サイズ分散DBでの競合・予測可能
UUID v4ランダムな128bit値推測不可能・分散OK大サイズ・ランダムで断片化
ULID時刻+ランダムソート可能・推測不可比較的新しい
Snowflake IDTwitter発の分散IDソート可能・高性能実装が複雑

現代のベストプラクティス

  • 代理キー(ID)を内部のPKとして使用
  • 業務キー(メールアドレス等)はUNIQUE制約付きの別カラムに
  • 公開URLには連番IDより推測不可能なUUIDを使用

歴史と背景

  • 初期のDB設計:自然キーを主キーとして使うのが一般的だった
  • 1990〜2000年代:大規模システムでの自然キーの問題が顕在化し代理キーが普及
  • 現在:ULIDやSnowflake IDなどの分散IDの標準化が進む

関連用語