Използвайте ограничение извън реда:
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)
)
Ако Wagon_ID
е не между 90 и 99, ограничението преминава. Ако е между 90 и 99, Total_Weight
трябва да е по-голямо от 10.
Ограничение извън линия като това ви позволява да приложите логиката на ограничението на ниво ред, което означава, че може да използва всяка от стойностите на колоната.
Допълнение Ето как да се справите с актуализирания въпрос с диапазони на Wagon_ID
и Total_Weight
. Вероятно има и други начини, но този се стори като „най-чистият“, което означава, че лично за мен беше най-лесно за четене :)
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)
)
)