Wenn Sie wirklich brauchen A_or_B_ID in TableZ , haben Sie zwei ähnliche Möglichkeiten:
1) Fügen Sie der Tabelle z nullable A_IDund B_IDSpalten hinzu, A_or_B_IDerstellen Sie mit ISNULL eine berechnete Spalte für diese beiden Spalten und fügen Sie eine CHECK-Einschränkung hinzu, sodass nur eine vonA_IDB_ID null null ist oder nicht
2) Fügen Sie der Tabelle z eine TableName-Spalte hinzu, die entweder A oder B enthalten darf. Erstellen Sie nun A_IDundB_ID als berechnete Spalten, die nur dann nicht null sind, wenn die entsprechende Tabelle benannt wird (unter Verwendung des CASE-Ausdrucks). Machen Sie sie auch hartnäckig
In beiden Fällen haben Sie jetzt A_IDund B_IDSpalten, die geeignete Fremdschlüssel für die Basistabellen haben können. Der Unterschied besteht darin, welche Spalten berechnet werden. Außerdem benötigen Sie in Option 2 oben keinen Tabellennamen, wenn sich die Domänen der 2 ID-Spalten nicht überschneiden - solange Ihr Fallausdruck bestimmen kann, welche DomäneA_or_B_ID
fallen
(Danke an den Kommentar zum Korrigieren meiner Formatierung)