Si vous avez vraiment besoin A_or_B_IDde TableZ, vous avez deux options similaires:
1) Ajoutez des colonnes Nullable A_IDet B_IDà la table z, créez A_or_B_IDune colonne calculée en utilisant ISNULL sur ces deux colonnes, et ajoutez une contrainte CHECK de telle sorte qu'un seul parmi A_IDou B_IDne soit pas nul
2) Ajoutez une colonne TableName à la table z, contrainte de contenir A ou B. maintenant créez A_IDet B_IDsous forme de colonnes calculées, qui ne sont non nulles que lorsque leur table appropriée est nommée (en utilisant l'expression CASE). Faites-les persister aussi
Dans les deux cas, vous disposez désormais de colonnes A_IDet B_IDqui peuvent avoir des clés étrangères appropriées pour les tables de base. La différence réside dans les colonnes calculées. De plus, vous n'avez pas besoin de TableName dans l'option 2 ci-dessus si les domaines des 2 colonnes d'ID ne se chevauchent pas - tant que votre expression de cas peut déterminer dans quel domaine A_or_B_ID
appartient
(Merci au commentaire pour avoir corrigé ma mise en forme)