Một cách để đạt được điều đó là chỉ cần viết ra "độc quyền HOẶC" thực sự có nghĩa là gì:
CHECK (
(FK1 IS NOT NULL AND FK2 IS NULL)
OR (FK1 IS NULL AND FK2 IS NOT NULL)
)
Tuy nhiên, nếu bạn có nhiều FK, phương pháp trên có thể nhanh chóng trở nên khó sử dụng, trong trường hợp đó, bạn có thể làm như sau:
CHECK (
1 = (
(CASE WHEN FK1 IS NULL THEN 0 ELSE 1 END)
+ (CASE WHEN FK2 IS NULL THEN 0 ELSE 1 END)
+ (CASE WHEN FK3 IS NULL THEN 0 ELSE 1 END)
+ (CASE WHEN FK4 IS NULL THEN 0 ELSE 1 END)
...
)
)
BTW, có những cách sử dụng hợp pháp cho mẫu đó, ví dụ: cái này (mặc dù không áp dụng cho MS SQL Server do thiếu các ràng buộc hoãn lại). Liệu nó có hợp pháp trong trường hợp cụ thể của bạn hay không, tôi không thể đánh giá dựa trên thông tin bạn đã cung cấp cho đến nay.