PostgreSQL - PRIMARY KEY (主キー) と UNIQUE の違い
PRIMARY KEY と UNIQUE の違いとは?
Primary Key(主キー)とUniqueはどちらも「データが一意である」制約を設定するものです。それならこの2つに違いはあるの?と気になったので調べてみました。
PRYMARY KEY
PRIMARY KEY(主キー)とは「テーブル内の行データを識別するために設定でき、重複した値を許さないカラム」のこと。複数のカラムに対して設定することも可能。NULLは許可されない。単純に言うと、後述するUNIQUE制約と非NULL制約を組み合わせたもの。この制約は一つのテーブルに対して一つしか設定できない。
UNIQUE
UNIQUE制約とは「カラムまたはカラムのグループに含まれるデータが、テーブル内の全ての行で一意であることを確実にする」ということ。つまり行データを識別する必要は無いけれど、あるカラムに対して重複した値が入るのを禁止したいときに使える。この制約は一つのテーブルに対して複数設定することができる。
UNIQUE制約ではNULLが許可されている点に注意です。
まとめ
PRIMARY KEYもUNIQUEもデータに一意性を持たせる点は同じだけど、目的によって使い分けできることがわかりました。
PRIMARY KEY
テーブル内の行データを特定するために一意性を持たせる。
UNIQUE
重複した値を格納したくないカラム(またはカラムのグループ)に一意性を持たせる。