レコードを一意制約したいときに、主キーを複数指定する複合キーを使う必要がある、と上司から教えてもらったのだが、ユニークキーの複数カラム指定との違いが分からなかったので、調べてみた。
複合キーとは
複数のカラムをプライマリーキーに指定し、その複数のカラムでレコードを一意に指定できるキー。
商品番号、商品、色をプライマリーキーに指定した場合
商品番号(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に格納できない。
複数カラムのユニークキー指定の場合
各カラム内で格納できない値が決まるため、複数のカラムのうちいくつかは同じデータの重複を許してレコードを一意に指定することができない。