/note/social

自然キーや複合キー項目について

複合キーを持つテーブルはJOIN時に全てのキー項目をJOINしないと意図した結果が得られない(しかもSQLはエラーにならないので気付くことが非常に困難)。

自然キーを外部キーとして持つテーブルは、その自然キーが変更された場合、関連する全テーブルのデータ洗い替えが必要となる。

そして、自然キーの多くは業務上の都合で変更される(設計当初は不変の値だと言われていても、変わる時は変わる)。

したがって、最初から自然キーの不変性はあてにせずにサロゲートキーを付与しておく方が後々のメンテナンス性を向上させる。

Rails(及びその類似フレームワーク)で採用されているActiveRecordが必ずID属性を持つのはそのような理由からである。

参考