Utiliser une contrainte hors ligne :
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 le Wagon_ID
n'est pas entre 90 et 99, la contrainte passe. S'il est compris entre 90 et 99, le Total_Weight
doit être supérieur à 10.
Une contrainte hors ligne comme celle-ci vous permet d'appliquer la logique de contrainte au niveau de la ligne, ce qui signifie qu'elle peut utiliser n'importe quelle valeur de colonne.
Avenant Voici comment gérer la question mise à jour avec des plages de Wagon_ID
et Total_Weight
. Il existe probablement d'autres moyens, mais celui-ci semblait être le "plus propre", ce qui signifie qu'il était plus facile pour moi personnellement de lire :)
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)
)
)