У вас нет нескольких внешних ключей. У вас есть вещи, напоминающие FK. FK - это набор столбцов, значения подтипа которых всегда также находятся в другой таблице, где столбцы образуют ключ-кандидат. Как прокомментировал ваш дизайн, это анти-шаблон, потому что он излишне усложнен. И SQL не легко поддерживает его целостность или ее оптимизацию.
Вместо того, чтобы иметь тип столбцов и foreign_id [sic] в информации о таблице, где значение типа указывает, какая другая таблица должна отображаться в качестве значения id, просто иметь таблицу VALUE_info для каждого значения, разрешенного по типу с FK foreign_id в соответствующий идентификатор таблицы VALUE_other.
Однако возможно, что вам действительно нужна каждая таблица VALUE_other, чтобы ее столбец foreign_id являлся справочной информацией FK. Т.е. вы можете хотеть, чтобы FK шел другим путем. Это происходит, когда информация (id, type, ...) означает, что «вещь [id] имеет тип подтипа [type] и ...) и VALUE_other (foreign_id, ...) означает, что вещь [foreign_id] имеет подтип VALUE и ... «Обратите внимание, что именами имен являются then_info (id, type, ...) и VALUE_thing_info (id, ...). Возможно, вам больше не понадобится тип. Все, что похоже на это, может быть настроено автоматически ORM, который имеет явную поддержку «подтипирования» или «полиморфизма».
Если это соответствует вашим потребностям, то в этом конкретном случае подтипирования, поскольку вы могли иметь каждую строку информации с foreign_id FK в одну таблицу VALUE_other, это означает, что каждая вещь имеет только один подтип. Для не более одного подтипа вы можете написать ограничение SQL для каждой таблицы VALUE_thing_info, что совпадающая строка id в thing_info имеет значение типа VALUE. (Технический тип по-прежнему избыточен в базе данных, но он может помочь с ясностью и эффективностью.) Вы можете написать ограничение SQL, в котором значения идентификатора thing_info находятся в объединении значений идентификатора VALUE_thing_info. (Некоторые из таких ограничений могут быть декларативными.Следующий тип в thing_info помогает с этим. Ввод типа также в таблицах VALUE_thing_info является еще одним избыточным идиомом, который, однако, также может быть более декларативным. Хотя ограничения на обновления могут быть более быстрыми.)
Имея внешний ключ, сопоставленный с несколькими таблицами, представляет собой анти-шаблон в дизайне базы данных. См. [Здесь] (http://stackoverflow.com/questions/22177776/foreign-key-column-mapped-to-multiple-primary-keys/22179608#22179608). –