QA Dojo
ハンズオン
進捗 0/47

UNIQUE / CHECK 制約

スライド 3 of 4

主キー・外部キー以外にも、テーブル単位でデータの整合性を強制する仕組み(制約)があります。 特に押さえたいのは UNIQUECHECK の 2 つ:

UNIQUE

重複禁止

指定カラムに同じ値が 2 件以上入らないことを強制する。

例:users.email が UNIQUE → 同じメールアドレスで 2 アカウント作成不可

破ろうとすると:UNIQUE constraint failed エラー

CHECK

条件強制

カラムが満たすべき条件式を強制する。

例:products.price >= 0 → マイナス価格を弾く

破ろうとすると:CHECK constraint failed エラー

制約の存在意義は 「アプリ側のバグがあっても DB が最後の砦になる」こと。 アプリ側のバリデーション漏れで不正データが流れてきても、DB が拒否してくれます。

📌 QA 視点:制約違反のエラーメッセージは「DB 側でデータが弾かれた」サイン。 500 エラーで UNIQUE constraint failed のような文字列が出ていたら、フロント/API 側のバリデーション漏れを疑います。

users.email カラムに UNIQUE 制約がある状態で、すでに登録済みのメールアドレスで新規ユーザーを作ろうとすると何が起きる?