Вы описываете проект под названием Полиморфные Ассоциации. Это часто приводит людей к неприятностям.
Что я обычно рекомендую:
A --> D <-- B
^
|
C
В этом проекте вы создаете общую родительскую таблицу D
, на которую ссылаются как A
, так и B
. Это аналог общего супертипа в ОО-дизайне. Теперь ваша дочерняя таблица C
может ссылаться на супер-таблицу, и оттуда вы можете перейти к соответствующей вложенной таблице.
С помощью ограничений и составных ключей вы можете убедиться, что на данную строку в D
могут ссылаться только A
или B
, но не оба.