複合キーを持つテーブルはJOIN時に全てのキー項目をJOINしないと意図した結果が得られない(しかもSQLはエラーにならないので気付くことが非常に困難)。
自然キーを外部キーとして持つテーブルは、その自然キーが変更された場合、関連する全テーブルのデータ洗い替えが必要となる。
そして、自然キーの多くは業務上の都合で変更される(設計当初は不変の値だと言われていても、変わる時は変わる)。
したがって、最初から自然キーの不変性はあてにせずにサロゲートキーを付与しておく方が後々のメンテナンス性を向上させる。
Rails(及びその類似フレームワーク)で採用されているActiveRecordが必ずID属性を持つのはそのような理由からである。