Sử dụng ràng buộc ngoài dòng:
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)
)
Nếu Wagon_ID
là không giữa 90 và 99, ràng buộc sẽ vượt qua. Nếu nằm trong khoảng từ 90 đến 99, thì Total_Weight
phải lớn hơn 10.
Ràng buộc ngoài dòng như thế này cho phép bạn áp dụng logic ràng buộc ở cấp hàng, nghĩa là nó có thể sử dụng bất kỳ giá trị cột nào.
Phụ lục Đây là cách xử lý câu hỏi đã cập nhật với phạm vi Wagon_ID
và Total_Weight
. Có lẽ có nhiều cách khác nhưng cách này cảm thấy là "sạch sẽ nhất", có nghĩa là nó dễ dàng nhất đối với cá nhân tôi để đọc :)
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)
)
)