我在这里非常热门,
我有两张桌子
MonthlyPayment
(EmpID, PaymentType, swiftcode
)EmpAssignment
(EmpID, status
) EmpAssignment.Status
只能是1或2
问题是:
我想要一个约束或触发器,这样在更新MonthlyPayment
时,如果PaymentType = 1
那么Swiftcode
应该是唯一的,并且仅对status = 1
。< / p>
如果PaymentType <> 1
,swiftcode
不应该是强制性的,而是唯一的
此外,约束不应影响status = 2
提前致谢。
答案 0 :(得分:1)
使用域,约束将成为域约束:
DROP DOMAIN PAYTYPE CASCADE;
CREATE DOMAIN PAYTYPE AS INTEGER
CHECK (value >= 1 AND value <= 666)
;
DROP DOMAIN ESTATUS CASCADE;
CREATE DOMAIN ESTATUS AS INTEGER
CHECK (value >= 1 AND value <= 2)
;
DROP TABLE MonthlyPayment CASCADE;
CREATE TABLE MonthlyPayment
( EmpID INTEGER NOT NULL PRIMARY KEY
, PaymentType PAYTYPE NOT NULL
, swiftcode varchar
);
DROP TABLE EmpAssignment CASCADE;
CREATE TABLE EmpAssignment
( EmpID INTEGER NOT NULL PRIMARY KEY
, status ESTATUS NOT NULL
);
现在测试一下:
INSERT INTO EmpAssignment(EmpID,status) VALUES(1,9);
结果(使用Postgresql-9.1):
ERROR: value for domain estatus violates check constraint "estatus_check"