人は何故PKに人工キーを用いるのか

残念ながら私はそんなにモデリングに関する知見は無いので、「自然キー分かりやすくて最高www人工キーなんて分かりにくいだけw」なんていう人を納得させるだけの明快なメリットを示せるような見解は持ちあわせておりません。漠然と、

  • メリット
    • 変更に強い
    • 自然キーの場合、複合キーがめんどくさい
    • 最近のデータベースアクセスソリューションもの(平たく言うと、広義の意味でのORM)と相性が良い
  • デメリット
    • 関連が分かりづらい
    • ベテランの技術者は自然キーに慣れている人が多く、なかなかコミットしてくれない
    • 既存システムはまだまだ自然キーのものが多いので、他システム連携的なところとは相性が悪いことが多い

くらいにしか思っておらず、ようするにビジネス的な変更がシステムに与える影響を小さくする、一種の粗結合的なものだと思うのですが、

  • 変更に強い
  • 最近のデータベースアクセスソリューションもの(平たく言うと、広義の意味でORM)と相性が良い

個人的にはこれだけでも十分メリットのような気がするので、

  • 理想的にはPKは人工キー
  • でも、現実的には自然キーをPKにせざるを得ない局面も多いかも(エンタープライズだと特に)

と、いうのが流行りだと勝手に思っていた訳ですが。

自然キーの「分かりやすさ」「理解しやすさ」「作りやすさ(実装しやすさ)」は密結合的なそれであり、最初に作るときには分かりやすくて作りやすいが、保守や仕変対応的なものも含めたTCO的な意味での「作りやすさ」とはまたちょっと違うと思っていた訳なのですが。

一方、私の上司は、私よりも上の世代の人だからかドットネッターだからか単なる個人の好みかそれともこれまでの現場がそうだったからなのかは分かりませんが、バリバリの自然キー派のようです。世間一般的なパターンは自然キーであり、人工キーを使うパターンは特殊なパターンだそうです。ケースによっては人工キーを使う局面もあるかもしれないが、過去も現在もこれからも、人工キーが主流になることなど有り得ないそうです。「人工キーがお勧めだなんて書いてあるモデリングの本なんて見たことが無い。あったら持ってこい*1」とまでおっしゃっています。

「変更に強い」なんて主張しても、「例えば受注番号の場合だとあれをこうしてそれをそうして・・・すれば人工キーなど別に要らん。明確なメリットがないのに自然キーの分かりやすさを捨てる意味が分からん」と、「自然キーは分かりやすい」の一点張りです。「変更に強い」とかそういう粗結合的なものは彼にとっては明確なメリットでは無いようです*2 *3

ここまで書いときながらいうのもなんなのですが、正直なところ私は、「別に自然キーでも人工キーでもどっちでもやってやれんことは無いと思うのでどうしても「俺は○○キー派だ!」と譲らない人がいれば実のところどっちでも良かったりするけど、「好きにしろ」と言われれば既存システムの足枷とかが無い限りは人工キー派かな」なんてユルい気持ちだったりするのですが、実際のところどうなんでしょうね。

実は、2:8理論でいうところの2が自然キー派で、8が人工キー派だなんていうオチもあるのかもしれませんけど。

*1: 「楽々ERDレッスン」とかはそんなことが書いてあるような気がするのですが・・・

*2: むしろ、「分かりにくくなる」といったデメリット的な側面が強いようです。

*3: 私はJaverなのでよくわからないのですが、.Netではあまりインターフェースをきったりとかはしないのでしょうか。