ナチュラルキーとサロゲートキーの違いとは?

今回はナチュラルキーとサロゲートキーの違いについて書きたいと思います。

一時期ナチュラルキーとサロゲートキーの違いを自分でネットで調べたことがあったのですが、分かりにくかったので記事にしたいと思います。
さらに分かりにくくなったら申し訳ないです。



ナチュラルキーとサロゲートキーの違いとは?

まず”ナチュラル”と”サロゲート”の英単語の意味について考えています。

ナチュラルは”自然”、サロゲートは”代行者”です。
ナチュラルキーはそのまま(自然)なキー、サロゲートキーは人為的(代行者)なキーとして設計されます。

ナチュラルキーとは?

ナチュラルキーとは、業務的に対象となるテーブルをユニークにするキーのことです。

例として、今話題のオリンピックのデータについて考えてみましょう。

次のようなオリンピックに関するデータがあるとします。
カラムは開催年、開催場所の二つです。
開催年は一意ですので開催年にPKを設定することができます。

 
開催年(PK) 開催場所
2012年 ロンドン
2016年 リオデジャネイロ
2020年 東京

このように、元からあるカラムをPKとした場合にPKのことをナチュラルキーと呼ぶことができます。

サロゲートキーとは?

対してサロゲートキーとは連番など元からあるデータとは別にデータが一意になるように設定したPKのことです。
ナチュラルキーとサロゲートキーはどちらもPKのことを言います。

先ほどの例のように開催年をPKとしても良いですが、もっとシステム的に分かりやすくしたい、〇〇年を主キーとするのは気持ち悪い、分かりにくいと感じる方もいると思います。

そこで連番を振ってその連番を主キーとすることで、次のようなテーブルを作るということもできます。

 
開催No(PK) 開催年 開催場所
0001 2012年 ロンドン
0002 2016年 リオデジャネイロ
0003 2020年 東京

上記の例ではPKを開催年から開催Noに移動させています。(場合によっては開催年、開催No両方を主キーとすることも考えられますが、ここでは議論を省きます。)

この場合開催年をPKとしていますが、このPKのことをサロゲートキーと言います。

要は主キーそのものに意味があるカラムか、人為的に連番などを割り振って主キーに意味を持たせたカラムかによってナチュラルキーかサロゲートキーか変わってくるわけですね。

ナチュラルキーとサロゲートキー、どちらが良いのか

ナチュラルキーとサロゲートキーどちらを使うのかは議論され続けていることです。

ナチュラルキーとサロゲートキー、どちらも長所を持っています。

例として
・ナチュラルキーはデータ構造が分かりやすい
・サロゲートキーはPKが多いテーブルの場合に連番として振ることでPKを少なくすることができる、SQLが簡潔になる
というメリットがそれぞれありますね。

しかしながら、ぶっちゃけナチュラルキーかサロゲートキーにするかは設計者の好みだと思います。
そこまでDBエキスパートなわけではないですが、どちらかではないとできないという処理はありません。
何かの処理が少し複雑になるだけです。

ただ、それぞれの用語と意味については結構重要なことだったりするのでぜひとも把握しておいてください。

終わりに

今回はナチュラルキーとサロゲートキーの違いについて書きました。

最後までお読みいただきありがとうございます。
よろしければブログやTwitterでのシェアをお願いいたします。
コメントもお待ちしております。






DB

Posted by ちこ