テーブル設計に関してのメモ。
テーブルを作る時にid int not null auto_increment primary key
を自動的に作ることが多いと思いますが、サロゲートキーといい、グレーノウハウに属します。
本来であれば複合主キーを使ってレコードを特定すべきですが、複合主キー自体にもデメリットがあるので代替案としてこれが使われることが多いです。
メリットとしては
- リレーションが非常に簡単になる
- レコードの特定が簡単になる
- リレーションが(数字を使うので)高速になることが多い。
というメリットがあります。(以前はほぼ自動的に作ってましたね・・・)
- 元々論理的に存在しないカラムであり、モデルをわかりにくくする
というデメリットがあります。
あとはあるデータベースのデータを別のデータベースのテーブルにコピーなんかするときにこれを使っているとリレーションの際、idが完全一致しないことが多いので、サロゲートキーの書き換えをしないとかなり面倒です・・・
参考リンク