Вы не можете сослаться на представление во внешнем ключе.
Если Вам действительно нужно A_or_B_ID
в TableZ, у Вас есть две подобных опции:
1) Добавляют nullable A_ID
и B_ID
столбцы к таблице z, делают 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 не накладываются - пока Ваше case-выражение может определить, в который домен A_or_B_ID
попадает
(Благодаря комментарию для фиксации моего форматирования)
Извините, Вы не можете FK к представлению в SQL Server.