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_ID
und B_ID
Spalten hinzu, A_or_B_ID
erstellen Sie mit ISNULL eine berechnete Spalte für diese beiden Spalten und fügen Sie eine CHECK-Einschränkung hinzu, sodass nur eine vonA_ID
B_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_ID
undB_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_ID
und B_ID
Spalten, 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)