Use uma restrição fora de linha:
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)
)
Se o
Wagon_ID
é não entre 90 e 99, a restrição passa. Se estiver entre 90 e 99, o Total_Weight
deve ser maior que 10. Uma restrição fora de linha como essa permite que você aplique a lógica de restrição no nível da linha, o que significa que ela pode usar qualquer um dos valores da coluna.
Adendo Veja como lidar com a pergunta atualizada com intervalos de
Wagon_ID
e Total_Weight
. Provavelmente existem outras maneiras, mas essa parecia a "mais limpa", o que significa que foi mais fácil para mim ler pessoalmente :) 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)
)
)