主キー問題を整理する

だいぶん前から延々とくすぶっているIDキー問題あるいはサロゲートキー問題なのですが、一時期下火になっていたのですが、また再燃している感もあります。それだけ奥深い問題なのかもしれません。

ただ、読んでみると同じような話題のように思えても意外に論点が錯綜しており、交通整理が必要なのではないかと感じます。私が見たところ

  • 有意キー vs 無意キー
  • グローバルキー vs ローカルキー
  • 公開キー vs 非公開キー
  • 複合主キーあり vs 複合主キーなし

というところが論点かな、と感じています。あまり一般的な用語法ではないところもありますが、個々人で微妙に定義が異なる気もするので、一旦この名前で呼ぶことにします。

まず、第一の論点「有意キー vs 無意キー」です。ここで言う有意キーとはキー自体が意味を持っている(キーの先頭3桁が品種を表すなど)というつもりで書いています。

第二の論点は「グローバルキー vs ローカルキー」です。これは、キーが全世界に通用するものなのか、システム内(あるいは社内)に閉じられたものなのかです。よくあるグローバルキーの例としてはメールアドレス、ISBN、郵便番号などが挙げられます。それに対しローカルキーは概ねどこかのシステムで採番されます。

第三の論点は「公開キー vs 非公開キー」です。非公開キー=システム内部IDと考えていただければよいかと思います。システム内部で採番され、画面上に情報として表示されたり、画面から検索条件として指定されず業務的な役割を持たないキーが非公開キーです(URLに含めるなど、システム的な用途で公開されても業務的な役割を持たないのであれば非公開キーとみなします)。これに対し公開キーはデータを特定するために社内で流通しているコードです。例えば社員番号、取引先コードなどがそれに当たります。

第四の論点は「複合主キーあり vs 複合主キーなし」です。IDの使用と複合主キーなしはセットで語られがちですが、IDを使用しつつ複合主キーを使うという考えも取り得ます。

しばしば、自然キーという呼び方が出てきますが、1、2、4 の話が混在してしまい混乱を招く原因になっているのでは、と思っています。また、ID を使う場合でも、1、3、4 の議論が混在しているように思います。

[追記] なお、筆者の立場は「無意キー」「ローカルキー」「公開キー」「複合主キーあり」です。