Postgresql
使域以表中的其他值為條件
如何根據另一個屬性值定義或更改域?
工資的 Fe 域是一個 > 500 的數值。但如果該人的入職日期 > 2013 年 1 月 1 日,則工資必須 > 1000。
我不會嘗試用 a 來解決這個問題,
DOMAIN
因為它不能引用其他列。改用CHECK
約束:ALTER TABLE foo ADD CONSTRAINT foo_min_salary CHECK (salary > 1000 OR hired < '2013-01-01' AND salary > 500);
NOT NULL
除了不允許NULL
值之外,還定義列。- 日期使用IS0 8601 格式,適用於任何語言環境和推薦的格式。
- 請注意我如何顛倒您的邏輯以得出更簡單的形式。
- 我
hired < '2013-01-01'
是故意寫的,懷疑你的片語hired > January 1st, 2013
有誤。- 注意運算符優先級。
AND
之前綁定OR
。如果您正在建構一個已經需要 的域,則可以將約束
value > 500
簡化為:CHECK
ALTER TABLE foo ADD CONSTRAINT foo_min_salary CHECK (salary > 1000 OR hired < '2013-01-01');