商品テーブルの主キー:人工キー vs 自然キー、徹底比較!
2024-04-02
商品テーブルにおける人工主キーと自然主キーの選択
データベース設計において、商品テーブルのようなエンティティの主キーとして、人工キーと自然キーのどちらを選択すべきか悩むことがあります。
人工キー
- 人工的に割り振られるキー (例: 連番)
- 人間にとって意味を持たない
- 変更の可能性が低い
- テーブル間の依存関係を薄くする
自然キー
- エンティティ固有の属性 (例: 商品コード)
- テーブル間の結合を容易にする
それぞれの利点と欠点
キータイプ | 利点 | 欠点 |
---|---|---|
人工キー | 変更に強い | 人間にとって意味を持たない |
自然キー | 人間にとって分かりやすい | 変更により影響が発生しやすい |
選択の指針
- 変更頻度: 変更頻度が高い場合は人工キー、低い場合は自然キーが適している
- 意味: 人間にとって分かりやすさが必要な場合は自然キーが適している
例
- 商品コードが頻繁に変更される場合は人工キー
- 商品コードが変更されず、他のテーブルから参照される頻度が高い場合は自然キー
人工キーと自然キーのどちらを選択するかは、それぞれの利点と欠点を理解し、状況に応じて判断する必要があります。
CREATE TABLE products (
product_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL,
PRIMARY KEY (product_id)
);
CREATE TABLE products (
product_code VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL,
PRIMARY KEY (product_code)
);
人工キーを使用する場合
product_id
は人工キーであり、自動的に割り振られる
product_code
は自然キーであり、商品コードを表す- 人間にとって分かりやすい
商品テーブルにおける人工主キーと自然キー以外の方法
複合主キー
- 複数の属性を組み合わせて主キーとする
- 一意性と変更頻度のバランスが取れる
- 商品コードと製造年月日
ハッシュキー
- 商品IDなどの属性をハッシュ化して主キーとする
- 一意性を高め、衝突の可能性を低減できる
- 商品IDをSHA-256でハッシュ化
database primary-key