Use una restricción fuera de línea:
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)
)
Si el Wagon_ID
es no entre 90 y 99, la restricción pasa. Si está entre 90 y 99, el Total_Weight
debe ser mayor que 10.
Una restricción fuera de línea como esta le permite aplicar la lógica de restricción a nivel de fila, lo que significa que puede usar cualquiera de los valores de columna.
Anexo Aquí se explica cómo manejar la pregunta actualizada con rangos de Wagon_ID
y Total_Weight
. Probablemente haya otras formas, pero esta se sintió como la "más limpia", lo que significa que personalmente fue más fácil de leer para mí :)
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)
)
)