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