2016-04-02 7 views
2

簡単な説明: 私は列を持つTABLE1を持っているが、従業員が1ヶ月列1のエントリが列2(postgresql)に重複エントリを持つことを制限する方法はありますか?

employee_id month  amount_spent 
E-124  JANUARY 200$ 
E-124  MARCH  14$ 
E-78   JANUARY 56$ 

を唯一つのエントリを持つ必要があり、私は(E-124、1月のエントリーを制限したいamount_spent

、月、EMPLOYEE_ID 、14 $)はすでにE-124が1月分の経費を提出しているためです。

+2

employee_idとmonthの簡単な 'UNIQUE'インデックスはそれを行うべきです...? –

+1

CONSTRAINT emp_id_month UNIQUE(employee_id_id、month) これは動作しますか? はJANUARYとMARCHを除く任意の月のレコードを入力できます – Hardy

+0

@ Hard:はい、ユニークなインデックスの仕組みです。ただ試してみてください。 –

答えて

0

EXCLUSION制約を適用する必要があります。

定義:

  • 除外制約が任意の2つの行が指定された演算子を使用して、指定した列または式に比較されている場合、これらの事業者の比較の少なくとも一方が偽またはnullを返しますことを確認してください。

例:

CREATE TABLE COMPANY7(
    employee_id INT NOT NULL, 
    month   CHAR(10), 
    amount_spent REAL, 
    EXCLUDE USING gist 
    (employee_id WITH =, 
    month WITH <>) 
); 

うまくいけば、それはあなたのために役立ちます。 :)

+0

一意索引で十分です。排他制約は必要ありません(一意制約は除外制約の特殊なケースですが、それでも許されます) –

関連する問題