Postgresql

使域以表中的其他值為條件

  • June 8, 2020

如何根據另一個屬性值定義或更改域?

工資的 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');

引用自:https://dba.stackexchange.com/questions/53654