乃木坂46(乃木坂って、どこ?、乃木坂工事中)2018-05-12サロゲートキーについてIT色々と調べたので整理してまとめておく。普通に設計して、基本的には主キーっぽいものが複数キーの組み合わせ(ナチュラルキー)になった場合の話。複合主キーを嫌って、業務的に意味のないIDを振ってそっちを主キーとするのがサロゲートキー。サロゲートキーを「テーブル名_id」とかにせず単に「id」としてしまい、何でもかんでもこのようなキー設計にすることを、『SQLアンチパターン』では「IDリクワイアド」と呼んでいるらしい。これに関しては割と賛否が分かれているようだ。・テーブル間の結合度が低くなる外部キーなんかになってると修正が入ったときにそのテーブル自体の他に参照しているテーブルも修正する必要がある。(これは複合キーでなくても、ナチュラルキーに言える特徴。)・JOINなど、SQL文が煩雑になる・主キーの範囲指定を行う際に、指定できないキー1が1~10かつキー2が50~100、のような指定は一般にはできないことが多い。・直感的にキーの意味が分かりにくい複合主キーの方が、エンティティの意味合いやレコードの区別が理解しやすい。キーだったものにはユニーク制約を入れる必要があるサロゲートキーを設定したところで、元々複合主キーだったものは重複してはいけないはずなので、これらに対して制約は必要。なると実質主キーが2つあるようなものなので、無駄にも思える。・外部参照してるときに参照先のエンティティが何者か分かりにくい複合主キーなら属性名見るだけである程度分かるが、結合しないと分からなくなってしまう。・JOINのときにUSINGが使えない・主キー以外に設定できないものがあるかもしれない元々複合キーだったものに対して、インデックスなどの何かしらを設定したいときに、DBMSによっては主キーに対してしか設定できない内容がある場合もあるらしく、その場合にはパフォーマンスに影響する。・データ移行のときに困る以降前後でデータ値が大きく変わってたりすると困るらしい。個人的には、直感的な理解のしやすさを取るか、テーブル間の結合度の低下を取るかのどっちかといったところ。(12)月別アーカイブ検索はてなブログをはじめよう!glory_hmさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。