Jednym ze sposobów, aby to osiągnąć, jest po prostu zapisanie, co właściwie oznacza „wyłączne OR”:
CHECK (
(FK1 IS NOT NULL AND FK2 IS NULL)
OR (FK1 IS NULL AND FK2 IS NOT NULL)
)
Jednakże, jeśli masz wiele FK, powyższa metoda może szybko stać się niewygodna, w takim przypadku możesz zrobić coś takiego:
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)
...
)
)
Przy okazji, istnieją uzasadnione zastosowania tego wzorca, na przykład ten (choć nie dotyczy MS SQL Server ze względu na brak odroczonych ograniczeń). Nie mogę ocenić na podstawie informacji, które do tej pory podałeś, czy jest to uzasadnione w Twoim konkretnym przypadku.