レコードを一意制約したいときに、主キーを複数指定する複合キーを使う必要がある、と上司から教えてもらったのだが、ユニークキーの複数カラム指定との違いが分からなかったので、調べてみた。
複合キーとは
複数のカラムをプライマリーキーに指定し、その複数のカラムでレコードを一意に指定できるキー。
商品番号、商品、色をプライマリーキーに指定した場合
商品番号(PK) | 商品(PK) | 色(PK) | 在庫数 | 店舗 |
---|---|---|---|---|
001 | 椅子 | 青 | 3 | 池袋 |
032 | 机 | 茶 | 4 | 茅ヶ崎 |
101 | 本棚 | 白 | 8 | 品川 |
332 | クッション | 緑 | 20 | 新宿 |
332 | クッション | 赤 | 48 | 初台 |
商品番号332、クッションが同じでも、色が異なればデータの格納ができる。
##ユニークキーとは
同じカラム内に同じデータを格納することができないキー。
商品番号、商品、色をユニークキーに指定した場合
商品番号(UQ) | 商品(UQ) | 色(UQ) | 在庫数 | 店舗 |
---|---|---|---|---|
001 | 椅子 | 青 | 3 | 池袋 |
032 | 机 | 茶 | 4 | 茅ヶ崎 |
101 | 本棚 | 白 | 8 | 品川 |
332 | クッション | 緑 | 12 | 五反田 |
|
|
赤 | 20 | 新宿 |
商品番号332、クッションの色が各カラムで既に存在するデータであれば、データの格納はできない。
##まとめ
複合キーの場合
PK指定のカラムの値が全て同じである場合、DBに格納できない。
複数カラムのユニークキー指定の場合
各カラム内で格納できない値が決まるため、複数のカラムのうちいくつかは同じデータの重複を許してレコードを一意に指定することができない。