我一直在努力找出一种方法来插入支票,这样它就不会允许支付日期早于发票日期。基本上,我有两个表:发票和付款。所以我想要一个支票约束来支付发票表中购买日期之前的日期。发票表中的invoice_id是付款表中的FK。有什么帮助吗?
答案 0 :(得分:3)
检查约束只能查看定义的表上的列。
你需要使用TRIGGER来做到这一点。
答案 1 :(得分:2)
一种方法可能是在付款表中复制购买日期,在invoice_id +购买日期的组合上添加第二个唯一约束,然后修改FK约束以包含它。然后,您可以拥有行级约束。 e.g。
CREATE TABLE invoices
( invoice_id NUMBER NOT NULL
, purchase_date DATE NOT NULL
, CONSTRAINT invoice_pk PRIMARY KEY (invoice_id)
, CONSTRAINT invoice_uk UNIQUE (invoice_id, purchase_date)
);
CREATE TABLE payments
( payment_id NUMBER NOT NULL
, invoice_id NUMBER NOT NULL
, purchase_date DATE NOT NULL
, payment_date DATE NOT NULL
, CONSTRAINT payment_pk PRIMARY KEY (payment_id)
, CONSTRAINT payment_invoice_fk
FOREIGN KEY (invoice_id, purchase_date)
REFERENCES invoices (invoice_id, purchase_date)
, CONSTRAINT payment_date_ck
CHECK (payment_date >= purchase_date)
);
下行:更新invoices.purchase_date变得有点棘手。