主キーは、「PRIMARY KEY」と呼んだりするので、略称として「PK」と良く呼ばれたりします。
主キーの特性
- 必ず何かしら値を持っている。(NOT NULL)
- 一意であること。
- 一度値が決定したら値がそれ以降変化することがない。
- インデックスが自動で生成されるためテーブルを早く検索することが可能です。
- 重複を排除できます。(ユニークキーの性質を持つ)
- 他テーブルに外部キーとして設定してもらうことでそのテーブルとの関係性を示せます。
サロゲート(代理キー)キー
テーブルにidという列を作成して、業務外の人工的なキーを主キーにすること。Railsとかでもデフォルトはこれになっていますし、昨今はこちらが主流のようです。
オートインクリメントで連番を振るのが一般的です。
メリット
SQLが簡潔になる。
もし、主キーが複合キーだと必ずそのテーブルと結合する際は複数のキーを指定しなければならないのでどうしても複雑になってしまいます。
テーブル間の依存関係が薄くなる。
主キーの体系が変化した場合の影響が少ない。
例えば、ナチュラルキーを単一キーから複合キーに変更したいといった場合には他のテーブルにも影響してしまいます。(他のテーブルにも複合キーを持たせないといけなくなってしまう)
画面間で実装を統一できる。
自動化ツールを作る場合なども楽。すべてIDで問い合わせればそのテーブルを一意に特定できるので無駄に脳みそを使う必要がなくなります。
また、もし何かデータベース用のツールを作りたいといった場合でもテーブルの主キーはidとわかっていれば非常に実装が楽になるでしょう。
デメリット
- 余分にデータ容量を使う。(業務上は必要のないデータにはなってくるので)
- 実質的な主キー項目に別途制約やインデックスを設定する必要性が発生する。
ナチュラルキー
業務で使う一意のキーを主キーにすること。(例えば、ユーザーテーブルで言えば電話番号など。)基本的にこちらを使っていると古いと思われるケースが多いようです。
メリット
- 主キーに対して制約やインデックスを設定する必要がない。
- ぱっと見データ構造が把握しやすい。
デメリット
- 変更影響が大きい。
ユニークキー
- 重複を許さないです。
- emailアドレスや電話番号等の重複を排除したいデータ項目に対して設定します。
- 主キーと同様にインデックスが自動で生成されます。
結論
基本的には、主キーはサロゲートキーを使うようにしましょう。
この記事へのコメントはありません。