DB業務でDBを扱っていて、一意な値をとるカラムがあるのに別途連番を振ってそれを主キーとしているテーブルを見つけたのでなぜだろうと思いググってみると、それはサロゲートキー(代理キー)と呼ぶんだそうです。これに対して、業務で使用するそのままのデータが入った主キーをナチュラルキーといいます。どっち使えばいいのどちらを使えばよいかネット上でも議論されているのでまとめてみます。RDBMSの理論的にはナチュラルキーのでの設計が本質的な問題。ナチュラルキーとサロゲートキーについての議論IDリクワイアドSQLアンチパターンしかし現実的には設計スキル不足や追加要件などが原因で物理設計の仕様変更が起こりうる。サロゲートキーをつけなかったせいで死にそうになった。サロゲートキーには仕様変更の保守性を高める効果があるため、これを使おうというのが現場の知恵。ネット上ではサロゲートキー派が圧倒しているように見えたのですが、「IDリクワイアド」で検索すると、現場的にもサロゲート一本はちょっとな意見もあります。「IDリクワイアド」に参加しました・その(物理設計)段階までに、キーになりうるものが見つからないのはおかしな話。■オートインクリメントの主キーだと、テストデータを作成するのが大変。・オートインクリメントのキーが外部キーとして使われていたりする。・開発時点では、各開発者のマシン上に構築したDB上でテストする。なると、キー以外のカラムの値は同じなのに、主キーの値だけ各自のDBで異なるカオスな状況に。■データ移行で何が辛いかというと、シリアルのキーを移行するのがすごく辛い。・移行の際に、番号は振替ないといけない場合がある。・なので、IDリクワイアドは移行が大変。再構築したほうがいいことが多い。サロゲートキーと「とりあえずID」の違い今後は逆に、IDリクワイアドしろ!な意見もSQLアンチパターンの感想の続き。ここまでくると、トレードオフの問題ですね。サロゲートキーを使うと変更に強くなります。よって保守性があがります。論理設計上必要ないものを組み込むので設計がわかりづらくなります。サロゲートキーに頼ってモデリングが甘くなる傾向を指摘する記事もあります。設計がわかりづらい、甘いシステムは保守性が落ちます。要は正しくサロゲートキーを使用しましょうということ。!どっち使うかは経験によります!もう一般論で決着する問題じゃないので、こうゆう場合はこうだけどこの要件が入ってくるとこっち、くらい繊細な判断が必要なんだと思います。その「経験」の部分を、経験しろ、ではなく、冷静に書いた本に出会いたい。本に出合いたいが結論じゃなんにもならんので小さくまとめ。必要な部分だけ、ピンポイントでサロゲートキーを使っていきます。念のためでサロゲートキーつけるとIDリクワイアドになるし、つけるべきところにつけてないと仕様変更で死ぬはめに。サロゲートキーが使えない場合もあるようです。[RDB][モデリング]生きているうちに自然キーvsサロゲートキー問題に決着を付けたい(1)例えば「自然キーはいつ変わるかわからないから、すべてのテーブルにサロゲートキーを振るべきだ」と信じている人は、世の中に「(正当な理由をもって)サロゲートキーを振ることが不可能なシステム」があることに気付いていないだろう。(中略)これらはいわゆる情報系のシステムであって、基幹系からデータの供給を受けて動いているので、自前でサロゲートキーを振ることが不可能*2なのだから仕方がない。(コメント欄)サロゲートキーが問題なく使えるような要件およびテーブル設計であれば、そもそも開発の難易度(規模ではない。)が低いため、生産性は高いでしょうね。結果的に、楽に作れたシステムで採用されていたサロゲートキーを過大に評価している人が多く見受けられる気がします。いう状況がサロゲートキーを使えない場合なのかよくわからずじまい。00:47私は昔からいるいわゆる「バッチ屋」で、ソート、ループ、マッチング、リスト構造などを扱ってきた世代です。電算世界から離れていたため、最近になってDBなど触る羽目になり、さまよっているうちにこのエントリに流れ着きました。ナチュラルキーかサロゲートキーかという問題については常に考えざるを得ない問題ですが、私見では現実世界との直接の表現となるテーブルではできるだけナチュラルキーを用い、DB内部だけで扱われるエンティティについてはサロゲートキーの方が扱いやすいと感じています。社員番号などと言うものも、現実の社員という人間につけられたサロゲートキーのようなものですが。言語の中では変数のスコープと言う概念がありますが、キーをスコープの概念で考えてみると、DBの外側にまで顔を出すならナチュラルキー、DB内部でのみ使われる識別のためのキーならサロゲートで良いのではないでしょうか。DB構築に際してはモデリングが非常に重要であろうことは少しDBをいじってみてよくわかりました。モデリングをしっかりやっておかないと、後で膨大な手戻りが発生するであろうことも想像に難くありませんが、モデリングだけやっていると本当に実装できるのか自信がなくなって来ます。実装力の不足を感じます。ところで、余計なことですが「こうゆう」ではなく、言うまでもなく正しくは「こういう」です。その昔、中高生女子が文章で自らの可愛らしさを表現するためにわざと用いたものを、社会人が普通に使うのは何とも奇異に感じます。そもそもサロゲートキーという言葉を知らなかった。そもそもサロゲートキーという言葉を知らなかった。コメントをキャンセルメールアドレスが公開されることはありません。ENTRY知らないと損をする6つのライセンスまとめオープンソースやフリーウェア、フリー素材などが巷に溢れ、それらを利用すガリレオ:ニュースブラウザをリリースしました。