Si realmente lo necesita A_or_B_IDen TableZ, tiene dos opciones similares:
1) Agregue columnas A_IDy anulables B_IDa la tabla z, A_or_B_IDcree una columna calculada usando ISNULL en estas dos columnas y agregue una restricción CHECK de modo que solo una de A_IDo B_IDno sea nula
2) Agregue una columna TableName a la tabla z, restringida para contener A o B. ahora cree A_IDy B_IDcomo 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_IDy B_IDque 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)