Если в Table3 содержатся все значения в Table1 UNION Table2, то у вас есть схема наследования :
Table3 { (int id, int type) PK }
Table1 { (int id, int type [CHECK type = 1]) FK Table3 }
Table2 { (int id, int type [CHECK type = 2]) FK Table3 }
При этом удаление из Таблицы3 будет каскадно перемещаться в Таблицу 1 или Таблицу 2.
В противном случае, если Table3 - это только подмножество Table1 UNION Table2 - тогда будет работать Table4 как полный набор.
Table4 { (int id, int type [CHECK type IN (1,2)]) PK }
Table1 { (int id, int type [CHECK type = 1]) FK Table4 }
Table2 { (int id, int type [CHECK type = 2]) FK Table4 }
Table3 { (int id, int type) FK Table4 }
Однако для обработки каскадных удалений вам нужно удалить из таблицы 4 (хотя вы можете сделать триггер на таблице 3, чтобы обработать это для вас).
Изменить (потому что я думаю, что это важный момент, который следует видеть отдельно от комментариев):
Да, проблема в том, что один и два являются родителями. Они оба имеют связанные записи в 3, которые будут FK, а не PK для этой таблицы. Кажется, что это практически невозможно при использовании ограничения FK. Спасибо за ответ! - Крис (час назад)
IMO - ваша модель данных нарушена. Table1 и Table2 не связаны, но вы пытаетесь вставить их в один столбец в Table3. Если Таблица1 и Таблица2 как-то связаны, то вам нужно смоделировать это.
Либо введите родительскую таблицу (Table4), если они связаны, либо 2-й столбец в Table3 (Table1 FK, Table2 FK) или 2 таблицы объединения, если они не связаны. Не пытайтесь вставить круглый колышек в квадратное отверстие - и не пытайтесь восполнить это с помощью спускового крючка. ;)