Si realmente lo necesita A_or_B_ID
en TableZ, tiene dos opciones similares:
1) Agregue columnas A_ID
y anulables B_ID
a la tabla z, A_or_B_ID
cree una columna calculada usando ISNULL en estas dos columnas y agregue una restricción CHECK de modo que solo una de A_ID
o B_ID
no sea nula
2) Agregue una columna TableName a la tabla z, restringida para contener A o B. ahora cree A_ID
y B_ID
como columnas calculadas, que solo son no nulas cuando se nombra su tabla apropiada (usando la expresión CASE). Hazlos persistir también
En ambos casos, ahora tiene columnas A_ID
y B_ID
que pueden tener claves foráneas apropiadas para las tablas base. La diferencia está en qué columnas se calculan. Además, no necesita TableName en la opción 2 anterior si los dominios de las 2 columnas de ID no se superponen, siempre que su expresión de caso pueda determinar en qué dominio A_or_B_ID
cae
(Gracias por comentar por arreglar mi formato)