Użyj ograniczenia poza linią:
CREATE TABLE Goods_In_Wagon (
Goods_ID NUMBER(whatever),
Wagon_ID NUMBER(whatever),
Total_Weight NUMBER(whatever),
CONSTRAINT Check_WagID_Weight
CHECK (Wagon_ID NOT BETWEEN 90 AND 99 OR Total_Weight > 10)
)
Jeśli Wagon_ID
jest nie między 90 a 99, ograniczenie mija. Jeśli wynosi od 90 do 99, Total_Weight
musi być większa niż 10.
Takie ograniczenie poza linią pozwala zastosować logikę ograniczenia na poziomie wiersza, co oznacza, że może użyć dowolnej wartości kolumny.
Uzupełnienie Oto jak obsłużyć zaktualizowane pytanie z zakresami Wagon_ID
i Total_Weight
. Prawdopodobnie są inne sposoby, ale wydawało mi się to „najczystsze”, co oznacza, że osobiście najłatwiej było mi przeczytać :)
CREATE TABLE Goods_In_Wagon(
Goods_ID NUMBER(whatever),
Wagon_ID NUMBER(whatever),
Total_Weight NUMBER(whatever),
CONSTRAINT Check_WagID_Weight
CHECK (
(Wagon_ID < 90) OR
(Wagon_ID BETWEEN 90 AND 99 AND Total_Weight > 10) OR
(Wagon_ID BETWEEN 100 AND 110 AND Total_Weight > 20) OR
(Wagon_ID BETWEEN 111 AND 120 AND Total_Weight > 30) OR
(Wagon_ID > 120)
)
)