Якщо вам дійсно потрібна 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
потрапляє
(Дякую за коментар за виправлення мого форматування)