Jeśli naprawdę potrzebujesz A_or_B_IDw TableZ, masz dwie podobne opcje:
1) Dodaj wartość null A_IDi B_IDkolumny do tabeli z, utwórz A_or_B_IDkolumnę obliczaną za pomocą ISNULL na tych dwóch kolumnach i dodaj ograniczenie CHECK takie, że tylko jeden z nich A_IDlub B_IDnie jest pusty
2) Dodaj kolumnę TableName do tabeli z, ograniczoną tak, aby zawierała A lub B. Teraz utwórz A_IDi B_IDjako kolumny obliczeniowe, które mają wartość różną od null tylko wtedy, gdy zostanie nazwana odpowiednia tabela (używając wyrażenia CASE). Niech też się utrzymują
W obu przypadkach masz teraz kolumny A_IDi, B_IDktóre mogą mieć odpowiednie klucze obce do tabel podstawowych. Różnica polega na tym, które kolumny są obliczane. Nie potrzebujesz również TableName w opcji 2 powyżej, jeśli domeny dwóch kolumn ID nie nakładają się - o ile wyrażenie przypadku może określić, do której domeny A_or_B_ID
należy
(Dzięki komentarzowi za naprawienie mojego formatowania)