Usa un vincolo fuori linea:
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 il Wagon_ID
è non tra 90 e 99, il vincolo passa. Se è compreso tra 90 e 99, il Total_Weight
deve essere maggiore di 10.
Un vincolo fuori linea come questo ti consente di applicare la logica del vincolo a livello di riga, il che significa che può utilizzare qualsiasi valore di colonna.
Appendice Ecco come gestire la domanda aggiornata con intervalli di Wagon_ID
e Total_Weight
. Probabilmente ci sono altri modi, ma questo mi è sembrato il "più pulito", il che significa che è stato più facile per me personalmente leggere :)
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)
)
)