Основы проектирования схемы БД просты, но более сложные ситуации могут быть действительно сложными, чтобы выяснить что лучше .Здесь много личной субъективности, которая может вступить в игру, и даже производительность может стать фактором денормализации дизайна.
Отказ от ответственности, моя личная рекомендация - никогда не использовать столбец для хранения более одного вида FK, т.е. столбец для FK должен хранить FK, которые указывают только на одну таблицу.Если вы этого не сделаете, вы должны отобразить каскад данных этого столбца в несколько запросов на дополнительный выбор внутри вашего кода, и он может стать более запутанным, чем вы ожидали.Ваша заданная «Проблема № 2, гарантирующая валидность между типом и FK» - это всего лишь начало всего мира боли, который будет касаться всего вашего исходного кода.
Предполагается, что вы измените дизайнчтобы использовать одно поле для каждой ссылки на FK, я бы также проверил, будет ли каждое поле FK в вашей основной «таблице хранения информации» полностью действительным для каждой записи.Если нет, я бы переместил столбцы FK, которые будут применяться только в отдельных случаях, к отдельной таблице.