我使用ORACLE 11.2 DB和有3個表:檢查約束比較總和其他表值
PROJECT_EMPLOYEE
|ID (PK) | P_ID |E_ID |Month |Capacity|
|--------|------|------|--------|--------|
|1 |1 |1 |201701 |0.4 |
|1 |1 |2 |201701 |0.6 |
|1 |2 |1 |201701 |0.4 |
EMPLOYEE
|ID (PK) | maxCapacity |
|----------|---------------|
|1 | 0.8 |
|2 | 0.6 |
項目
|ID (PK) |other columns|
|----------|-------------|
|1 |some data |
|2 |some data |
而且我有一個檢查約束來請檢查是否組合表PROJECT_EMPLOYEE
的(P_ID, E_ID. Month)
是獨一無二的。
現在我不希望有人可以將數據插入表PROJECT_EMPLOYEE
,如果一個員工在一個月內的產能總和大於表EMPLOYEE
的該特定員工的maxCapacity。
例如在上面的示例中:我不應該爲201701員工1和2插入任何行。
是否可以使用檢查約束來解決此問題?
檢查約束處理個別字段值。您必須創建觸發器或存儲過程來檢查總和,並在超出限制時引發錯誤。這樣的觸發雖然會非常昂貴。 –
從商業角度來看,這樣的檢查也是錯誤的。 * data *沒有問題。這是*商業*和*應用程序*必須處理非常真實的,非常常見的情況,即員工的工作比他所認爲的要多。通過拒絕記錄*事實*,您正在做出商業決定。 –
@PanagiotisKanavos你會推薦在客戶端檢查嗎? – flxplzk