アウトオブライン制約を使用する:
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)
)
)