名前の列が変更される場合は、主キーの候補としては適切ではありません。主キーは、テーブルの一意の行を定義する必要があります。変更できるのであれば、実際にはそうしていません。システムの詳細を知らなければ言うことはできませんが、これは代理キーにとって良い時期かもしれません。
また、すべての主キーに自動インクリメント整数を使用するという神話を払拭することを期待して、これを追加します。それらを使用することは必ずしもパフォーマンスの向上ではありません。実際、それは正反対であることがよくあります。自動インクリメント列がある場合、これは、システム内のすべてのINSERTに、新しい値を生成するための追加のオーバーヘッドがあることを意味します。
また、Markが指摘しているように、関連するテーブルのチェーンがある場合は、すべてのテーブルに代理IDがあり、あるテーブルから別のテーブルに移動するには、それらのテーブルをすべて結合してトラバースする必要があります。通常はそうではない自然な主キーを使用します。通常、6つのテーブルを整数で結合すると、2つのテーブルを文字列で結合するよりも遅くなります。
また、すべてのテーブルに自動インクリメントIDがあると、セットベースの操作を実行する機能が失われることがよくあります。親テーブルに1000行を挿入してから、子テーブルに5000行を挿入する代わりに、生成されたIDを取得して割り当てるために、親行をカーソルまたはその他のループに一度に1つずつ挿入する必要があります。関連する子供たちに。誰かがデータベース内のすべてのテーブルで自動インクリメントIDを使用することを主張したため、30秒のプロセスが20分のプロセスに変わるのを見てきました。
最後に(少なくともここにリストしている理由で-確かに他にもあります)、すべてのテーブルで自動インクリメントIDを使用すると、設計が不十分になります。設計者がテーブルの自然キーが何であるかを考える必要がなくなると、通常、誤った重複がデータに含まれることになります。一意のインデックスの問題を回避することはできますが、私の経験では、開発者と設計者はそのような余分な労力をかけず、新しいシステムを1年使用した後、データベースにデータがないためにデータが混乱していることに気付きます。自然キーによるデータの適切な制約。
確かに代理キーを使用する時間はありますが、すべてのテーブルでそれらを盲目的に使用することは、ほとんどの場合間違いです。