「ナチュラルキー」と「サロゲートキー」の違い
予備知識
| 用語 | 意味 |
|---|---|
| データベース | データがそれっぽい感じに入っている箱。データのまとまり |
| 主キー | データベースのデータを一意に識別するための項目 |
それぞれの用語の意味
| 用語 | 意味 |
|---|---|
| ナチュラルキー | 意味を持つ項目を使った主キー |
| サロゲートキー | 機械的に連番を振った主キー |
似ているところ
どちらもデータベースの主キーです。
違うところ
キー自体が項目としての意味を持つかが違います。
ナチュラルキーは項目としての意味を持ちます。
元々あった項目を主キーとして使います。
サロゲートキーは項目としての意味を持ちません。
意味のない連番を主キー用に別途割り振ります。
例えば、以下のデータが あったとしましょう。
[出席番号、名前、性別、血液型]
1番、相川、男、O型
2番、合田、男、B型
3番、伊藤、男、A型
4番、宇野、男、O型
・
・
・
1番、伊藤、女、A型
2番、井上、女、B型
・
・
このデータは出席番号+性別で一意に特定できます。
[出席番号、名前、性別、血液型]
1番、相川、男、O型
2番、合田、男、B型
3番、伊藤、男、A型
4番、宇野、男、O型
・
・
・
1番、伊藤、女、A型
2番、井上、女、B型
・
・
「よし!じゃあ、出席番号+性別を主キーってことにしようぜー!」がナチュラルキーです。
主キーとなる項目である「出席番号」と「性別」にも意味がありますよね。
一方で、それぞれのデータに項目「No.」を追加して、一意に特定できるようにすることもできます。
[出席番号、名前、性別、血液型、No.]
1番、相川、男、O型、1
2番、合田、男、B型、2
3番、伊藤、男、A型、3
4番、宇野、男、O型、4
・
・
・
1番、伊藤、女、A型、19
2番、井上、女、B型、20
・
・
のように、項目を追加してあげるのです。
この「主キー用に追加した項目(特に意味のない連番)を主キーにしようぜー!」がサロゲートキーです。
項目「No.」自体は行を特定するためにわざわざ用意した項目です。
「出席番号」などと違って項目自体には意味がありませんよね。
個人的な使い分け
特に制約がなければ、ナチュラルキーを使います。
フレームワークなどの制約がある場合や、後々がっつりと変更が入りそうな場合のみ、しぶしぶサロゲートキーを使います。
あくまで好みの問題ですが
(1)主キーに設定した項目は個別にインデックスを設定しなくてよい
(2)主キーに設定した項目は個別に制約をかけなくてよい
(3)パッと見でデータ構造が把握しやすい
の理由から、ナチュラルキーの方が好きなのです。
※特に(3)の理由が大きいです。
「拡張性を考えるとサロゲートキーの方が使い勝手が良い」という理屈も分かりますけどね。
個人的には、論理的に入ってくるはずのないデータは物理的にも入らないようにしておく方が好みです。
あっ、そうそう。
たまーに、ナチュラルキー派の人とサロゲートキー派の人が喧嘩しているのを見かけますが、論点が噛みあっていないことが多いように感じます。
どちらが良い・悪いではなく、何を重視するかで一長一短があると思います。






