作記録

記憶代わり

複合主キーではなくサロゲートキーを使う理由

1. 定義

1-1. サロゲートキー(Surrogate key)

A surrogate key (or synthetic key, pseudokey, entity identifier, factless key, or technical key[citation needed]) in a database is a unique identifier for either an entity in the modeled world or an object in the database. The surrogate key is not derived from application data, unlike a natural (or business) key.[1]

データベースにおけるサロゲートキー(または合成キー、疑似キー、エンティティ識別子、ファクトレスキー、テクニカルキー[要出典])は、モデル世界のエンティティまたはデータベース内のオブジェクトのいずれかに一意の識別子である。サロゲートキーは、ナチュラルキー(またはビジネスキー)とは異なり、アプリケーションデータから派生するものではない[1]。

引用元...https://en.wikipedia.org/wiki/Surrogate_key

2. 複合主キーではなくサロゲートキーを使う理由

観点 サロゲートキーを使う理由 複合主キーを使わない理由
関心事 テーブルの識別子のカラムを作るので識別に、そのカラムを利用する事がはっきりする。 複合なので本来何か他に記録したいカラムであり、その上識別の一部にも使われるため1つのカラムに2つ(以上)の関心事がある事になる。
JOIN JOINが見やすい。 JOINが見にくい。
ナチュラルキー ナチュラルキーではない。 複合主キーだからと言ってナチュラルキーであるわけではない。例えば顧客番号や商品番号や商品コードなどは現実で使われていても結局は人が識別のために作った番号なのでナチュラルキーではない。
識別に必要なカラムの表し方 UNIQUE制約で表す。 識別に必要なカラムを複合主キーにするので、そのまま表せる。
コード量 複合主キーを使う場合より少ない。 サロゲートキーを使う場合より多い。