Jeśli naprawdę potrzebujesz A_or_B_ID
w TableZ, masz dwie podobne opcje:
1) Dodaj wartość null A_ID
i B_ID
kolumny do tabeli z, utwórz A_or_B_ID
kolumnę obliczaną za pomocą ISNULL na tych dwóch kolumnach i dodaj ograniczenie CHECK takie, że tylko jeden z nich A_ID
lub B_ID
nie jest pusty
2) Dodaj kolumnę TableName do tabeli z, ograniczoną tak, aby zawierała A lub B. Teraz utwórz A_ID
i B_ID
jako 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_ID
i, B_ID
któ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)