Constraints は table 内の data に対して database が enforce する rules です。application code だけでなく database level で data integrity を保証します。主なものは PRIMARY KEY、FOREIGN KEY、UNIQUE、NOT NULL、、 です。
Constraints は table 内の data に対して database が enforce する rules です。application code だけでなく database level で data integrity を保証します。主なものは PRIMARY KEY、FOREIGN KEY、UNIQUE、NOT NULL、、 です。
CHECKDEFAULTCREATE TABLE users (
id INT PRIMARY KEY, -- unique + not null identifier
email VARCHAR(255) UNIQUE NOT NULL, -- unique かつ必須
age INT CHECK (age >= 0 AND age <= 120), -- condition を満たす必要
country VARCHAR(2) DEFAULT 'US', -- insert 時に値がなければ default
role VARCHAR(20) NOT NULL DEFAULT 'user',
manager_id INT REFERENCES users(id) -- FOREIGN KEY
);
PRIMARY KEY → row を一意に識別(unique + not null, indexed)
FOREIGN KEY → 別 table の key を参照(referential integrity)
UNIQUE → duplicate values を禁止
NOT NULL → column に値が必要(NULL 不可)
CHECK → value が condition を満たす必要(age >= 0, status IN (...))
DEFAULT → insert 時に値がない場合に使う default value
-- ❌ application code だけで uniqueness を保証すると:
-- race condition、bug、別 app からの insert で duplicate が入りうる
-- ✅ UNIQUE constraint は DB level で ALWAYS enforce される
email VARCHAR(255) UNIQUE
Database constraints は data integrity の last line of defense です。どの code、何個の app、manual changes から data が入っても enforce されます。application-level checks が見逃す race conditions も防げます。
CHECK (price > 0)
CHECK (status IN ('active', 'inactive'))
CHECK (end_date > start_date)
CHECK は domain / business rules を schema 内で enforce します。
Constraints は data integrity を守るために不可欠です。uniqueness、presence、valid values、valid references を database が保証します。
特に重要なのは、application code だけに頼らないことです。database constraints は bugs、multiple applications、race conditions から data を守ります。robust schema design の基本です。