Якщо вам дійсно потрібна A_or_B_IDтаблиця Z, у вас є два схожі варіанти:
1) Додайте до таблиці z нульові значення A_IDта B_IDстовпці, створіть A_or_B_IDобчислюваний стовпець, використовуючи ISNULL для цих двох стовпців, та додайте обмеження CHECK, яке лише одне з A_IDабо B_IDне має значення null
2) Додайте стовпець TableName до таблиці z, обмежений вмістом A або B. Тепер створіть A_IDі B_IDяк обчислювані стовпці, які не є нульовими, лише коли названо відповідну таблицю (з використанням виразу CASE). Зробіть їх також наполегливими
В обох випадках у вас тепер є A_IDі B_IDстовпці, які можуть мати відповідні зовнішні ключі до базових таблиць. Різниця полягає в тому, в яких обчислюються стовпці. Крім того, вам не потрібне TableName у варіанті 2 вище, якщо домени 2 стовпців ідентифікатора не збігаються - до тих пір, поки вираз справи може визначати, до якого домену A_or_B_ID
потрапляє
(Дякую за коментар за виправлення мого форматування)