0

支払い日が請求日より早くならないように小切手を挿入する方法を見つけるのに苦労しています。基本的に、請求書と支払いの 2 つのテーブルがあります。そのため、請求書テーブルの購入日より前の日付を支払いに入力するチェック制約が必要です。請求書テーブルのinvoice_idは、支払いテーブルの外部キーです。何か助けはありますか?

4

2 に答える 2

3

チェック制約は、それが定義されているテーブルの列のみを見ることができます。

これを行うには、TRIGGERを使用する必要があります。

于 2012-04-05T06:08:37.180 に答える
2

1つのアプローチは、支払いテーブルで購入日を複製し、invoice_id +購入日の組み合わせに2番目の一意の制約を追加してから、それを含めるようにFK制約を変更することです。次に、行レベルの制約を設定できます。例えば

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の更新は少し注意が必要です。

于 2012-04-05T07:14:46.440 に答える