[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

「ナチュラルキー」と「サロゲートキー」の違い

スポンサーリンク

予備知識


用語意味
データベースデータがそれっぽい感じに入っている箱。データのまとまり
主キーデータベースのデータを一意に識別するための項目

それぞれの用語の意味


用語意味
ナチュラルキー意味を持つ項目を使った主キー
サロゲートキー機械的に連番を振った主キー

似ているところ


どちらもデータベースの主キーです。


違うところ


キー自体が項目としての意味を持つかが違います。
ナチュラルキーは項目としての意味を持ちます。元々あった項目を主キーとして使います。
サロゲートキーは項目としての意味を持ちません。主キー用に意味の無い連番を別途割り振ります。

例えば、以下のデータがあったとしましょう。

[出席番号、名前、性別、血液型]
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)の理由が大きいです。

「拡張性を考えるとサロゲートキーの方が使い勝手が良い」という理屈も分かるのですが、論理的に入ってくるはずの無いデータは、物理的にも入らないようにしておきたいです。

たまーに、ナチュラルキー派の人とサロゲートキー派の人が喧嘩しているのを見かけますが、論点が噛みあっていないことが多いように感じます。
どちらが良い・悪いではなく、何を重視するかで一長一短があると思うのですよね。


スポンサーリンク