生きているうちに自然キーvsサロゲートキー問題に決着を付けたい(1)
営業のアプローチ方法にA,Bがあるとして(例えば「礼状は手書きで出す」「礼状は印刷して出す」とか)、Aの成約率が10%でBのそれが5%なら、「Aしかやらない」というのは悪くない選択だろう。だが我々の仕事は営業とは違っている。
ある量産品の製造方法にA,Bがあるとして、Aの良品率が98%でBのそれが95%なら、Aで製造するのが正しいだろう。だが我々の仕事は量産品の製造とは違っている。
システム開発における失敗プロジェクトは、営業における失注や工場における不良品のようなものではない。つまり、事業を行う上での必要経費ではない。
だから、A,Bどちらの開発技法を採用すべきかを、プロジェクトの成功率で決めることはできない。
仮に自然キーを採用したプロジェクトの成功率が5割で、サロゲートキーを使った場合のそれが9割だったとして、「すべてのシステムにサロゲートキーを使う」という判断は間違っている。1割のプロジェクトが確実に失敗するからだ。もしその1割に自然キーがフィットしていたとすれば、完全な判断ミスをしたことになる。
この1割の存在を云々することはサロゲートキーに対する批判・攻撃ではない。逆です。それはサロゲートキーという技法を安全に使うために絶対必要な何かだ。
みんな大好きクレイトン・クリステンセンがこのあたりのことを繰り返し書いている*1。
クリステンセンは「現実を観察して理論を作ったら、次はその理論に対する反例を探せ」と言う。
自分の理論を支持する事例などいくら集めても意味がないのだ。理論が失敗する事例を積極的に探して、失敗する条件を明らかにすることで初めて理論は改善される。
つまり「こうすれば、結果は何%の確率でこうなる。結果には...という傾向が見られる」という相関関係の記述から、「〜という条件が揃ったところででこうすれば、結果は必ずこうなる」という「条件付き因果関係の言明」に理論が進化する、のだそうだ。
後者の理論があって初めて、我々は(全体の傾向ではなく)個々の事例の結果を予測することができるようになる。
これから書くことはサロゲートキーへの批判ではない
必要なのは、技法が通用する時・しない時の、正確な場合分けだ。
これは、その技法を使っている人にはできないことだと思う。
例えば「自然キーはいつ変わるかわからないから、すべてのテーブルにサロゲートキーを振るべきだ」と信じている人は、世の中に「(正当な理由をもって)サロゲートキーを振ることが不可能なシステム」があることに気付いていないだろう。内側から限界は見えないのだ。
よって、ある技法の限界を探るには、その技法を使っていない人の協力が必要になる。
ところで現状の俺は完全な自然キー派だ。
いま運用担当しているお客さん(2社)のシステムは、1つは本番DB内のテーブル数が900本、もう一つは2000本以上あるが、サロゲートキーを付加しているテーブルは1つもない。
サロゲートキー派の人には地獄のような状態に見えると思うが、これらはいわゆる情報系のシステムであって、基幹系からデータの供給を受けて動いているので、自前でサロゲートキーを振ることが不可能*2なのだから仕方がない。
近日中に、そういう立場からサロゲートキーの適用範囲を云々するつもりだが、これは既述の通り自然キー派によるサロゲートキーへの批判・攻撃ではない。違います。違うんです。
*1:教育×破壊的イノベーション~教育現場を抜本的に変革すると、もう一冊何かに書いているのを見た
*2:不可能だとわかってもらえるだろうか