【なちゅらるきー】

ナチュラルキー とは?

最終更新:
💡 業務ですでに使っている識別子を、データのキーに

社員番号など、業務のデータに元からある識別用の値やその組み合わせを使うキー。主キーに選ぶ場合は、一意でNULLがないことが必要。識別専用に追加するサロゲートキーと区別する。

📌 このページのポイント
キーの出どころを比べるナチュラルキーサロゲートキー業務の番号を使う専用IDを追加する社員番号氏名ID社員番号E101田中1E101業務で一意という前提業務の番号も保存番号か文字列かで決まる分類ではない変更・再利用・参照への影響も確認する
同じ社員データを、業務の社員番号で識別する案と専用IDで識別する案の比較です。主キーには一意性とNULLがないことが必要で、業務の重複制約も別途考えます。
ひよこ ひよこ
ナチュラルキーって、自然派のキーってこと?
ペンギン先生 ペンギン先生
たとえば会社で使っている社員番号を、社員データのキーにも使う考え方だよ。名前か番号かではなく、業務ですでに使う識別子か、データベースの識別専用に追加した値かの違いなんだ。
ひよこ ひよこ
メールアドレスとかもそうなの?
ペンギン先生 ペンギン先生
候補にはなるけれど、メールアドレスだけで常に1人に決まるとは限らないよ。主キーにするなら重複もNULLもない必要がある。変更や再利用のルールも確認しよう。氏名のように意味があっても重複する値は、そのままキーにはできないんだ。
ひよこ ひよこ
値が変わるとどうなるの?
ペンギン先生 ペンギン先生
その値を外部キーで参照していれば、参照先との整合を保つ対応が必要だよ。PostgreSQLなら更新を拒否したり、ON UPDATE CASCADEで参照側にも反映したりできる。全部を手作業で更新するとは限らないけれど、影響の確認は必要なんだ。
ひよこ ひよこ
じゃあナチュラルキーって使わない方がいいの?
ペンギン先生 ペンギン先生
一律には決められないよ。業務上の一意性、値の安定性、参照や履歴の管理などで判断する。同じ社員番号でも、複数の会社のデータをまとめれば重複するかもしれない。その場合は会社と社員番号の組み合わせなども考えるんだ。
ひよこ ひよこ
サロゲートキーにすれば重複の心配も解決?
ペンギン先生 ペンギン先生
追加したIDで行を区別できても、社員番号などの重複を自動で防ぐわけではないよ。業務上重複してはいけない列や組み合わせには、必要な一意制約も設けるんだ。ナチュラルキーが必ず主キーになるわけでもないよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ナチュラルキー」って出てきたら「業務に元からある識別子を使うキー」と思えばだいたいOK!
📖 おまけ:英語の意味
「Natural Key」 = 自然キー
💬 識別のためだけに追加する値ではなく、業務のデータが元から持つ識別子を使う、という意味だよ。番号でも業務上の役割があれば候補になるんだ。

参考資料

← 用語集にもどる