制約を「データベース内でデータを識別するためのもの」とアバウトに認識していたがどうやら一意性制約(UNIQUE KEY)と主キー制約 (PRIMARY KEY)は違うらしい。
まず、二つの制約についてそれぞれ見ていこう。
「主キー制約 / プライマリキー」
表の各行を完全に一意に識別できるカラムまたはカラム集合であり、すべてのカラムに NULL を含まない。
「一意キー制約 / ユニークキー」
表の NULL 以外の各行を一意に制約する。しかし NULL 値を許容するため、値なしの状態が複数存在することは許される。
#####ユーザー登録で例えるなら
主キー制約の場合「すがわら」という名前を登録したいときカラムに「すがわら」が入っていれば登録することはできない。
一方、一意性制約の場合「すがわら」という名前を登録したいとき同じカラムに「すがわら」が入っていても他のカラムの組み合わせに対して一意性制約を設定していれば登録することができる。
#####ユーザー登録における主キー制約を設けないことによる不都合
例えば
name password
「すがわら」 「A」
「すがわら」 「b」
「すがわら」 「c」
というテーブルが存在したとする場合、パスワードカラムに一意性制約を持たせる。また、2つのカラムの組み合わせに対して一意性制約を設定すればレコードごとに一意性制約をもたせれることもできるみたい。
実際にログインするとき、どの「すがわら」のレコードにログイン(データを取得)するのかはSQLの種類によってそれぞれ決まりが異なっているため異なる。よって必要とされるパスワードも異なる。これだと使い物にならなくなってしまうためプラマリキーを設定してすがわらを重複させないようにする必要がある。
認識に間違いがあれば教えていただけるとありがたいです。