Если вам действительно нужен A_or_B_ID
TableZ, у вас есть два похожих варианта:
1) Добавьте в таблицу z столбцы, допускающие значение NULL, A_ID
и B_ID
столбцы, создайте A_or_B_ID
вычисляемый столбец с использованием ISNULL для этих двух столбцов и добавьте ограничение CHECK, чтобы только один из A_ID
или B_ID
не был нулевым
2) Добавьте столбец TableName в таблицу z, который должен содержать либо A, либо B. Теперь создайте A_ID
и B_ID
как вычисляемые столбцы, которые не равны NULL, только если их соответствующая таблица названа (с использованием выражения CASE). Сделайте так, чтобы они тоже остались
В обоих случаях, теперь у вас есть , A_ID
и B_ID
столбцы , которые могут иметь соответствующие внешние ключи к базовым таблицам. Разница в том, какие столбцы вычисляются. Кроме того, вам не нужно TableName в варианте 2 выше, если домены двух столбцов идентификатора не перекрываются - если ваше выражение case может определить, какой домен A_or_B_ID
попадает в
(Спасибо за комментарий за исправление моего форматирования)