AFAIK, вы не можете сделать это со стандартными внешними ключами.Однако вы можете реализовать что-то, что поможет обеспечить целостность данных с помощью триггеров.По сути, триггер будет проверять наличие «внешнего ключа» в ссылочной таблице - значение, которое должно присутствовать - всякий раз, когда происходит вставка или обновление в ссылочной таблице.Аналогичным образом, удаление из ссылочной таблицы может иметь триггер, который проверяет записи в ссылочной таблице, в которых используется удаляемый ключ.
Обновление: хотя я получил право на "ответ", я согласен с оставленным комментарием@oneday, когда это на самом деле проблема, вызванная дизайном, которая, вероятно, заставит вас пересмотреть свой дизайн.То есть у вас должно быть три разных столбца, а не один столбец, ссылающийся на три таблицы.Вы просто оставите два других столбца пустыми при заполнении одного, что, в свою очередь, позволит вам использовать стандартные внешние ключи.Любое беспокойство, что это "использовало бы слишком много места", глупо;это серьезный случай преждевременной оптимизации - это просто не имеет значения.