Se hai davvero bisogno A_or_B_ID
di TableZ, hai due opzioni simili:
1) Aggiungi nullable A_ID
e B_ID
colonne alla tabella z, crea A_or_B_ID
una colonna calcolata usando ISNULL su queste due colonne e aggiungi un vincolo CHECK in modo tale che solo uno di A_ID
o B_ID
non sia nullo
2) Aggiungere una colonna TableName alla tabella z, vincolata a contenere A o B. ora creare A_ID
e B_ID
come colonne calcolate, che sono solo non nulle quando viene denominata la tabella appropriata (utilizzando l'espressione CASE). Falli persistere anche tu
In entrambi i casi, ora hai A_ID
e B_ID
colonne che possono avere chiavi esterne appropriate per le tabelle di base. La differenza è in quali colonne vengono calcolate. Inoltre, non è necessario TableName nell'opzione 2 sopra se i domini delle 2 colonne ID non si sovrappongono, a condizione che l'espressione del tuo caso possa determinare in quale dominio A_or_B_ID
rientra
(Grazie al commento per aver corretto la mia formattazione)