1

我这里真的很火爆

我有两张桌子

  1. MonthlyPayment( EmpID, PaymentType, swiftcode)
  2. EmpAssignment( EmpID, status)

EmpAssignment.Status只能是 1 或 2

问题是:

我想要一个约束或触发器,这样在更新MonthlyPayment, if PaymentType = 1then时Swiftcode应该是唯一的,并且只对那些status = 1.

如果PaymentType <> 1,swiftcode不应该是强制性的而是唯一的 此外,约束不应该影响那些status = 2

提前致谢。

4

1 回答 1

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"
于 2013-09-11T14:28:17.407 回答