Я думаю, что предыдущие ответы хорошо отвечают на первую часть вопроса.Однако ссылка, рекомендованная Дэниелом, обеспечивает решение только для случая, когда количество ссылочных «исходных» таблиц достаточно мало.И решение не будет легко масштабироваться, если вы решите увеличить количество «исходных» таблиц.
Чтобы порекомендовать лучшую стратегию, было бы неплохо иметь немного больше информации о том, что задача и если "Исходные "таблицы имеют что-то общее, что позволило бы объединить их.
В текущей структуре (насколько я могу судить по вопросу) я бы изменил соотношение:
- Iсоздаст таблицу (назовем ее AllSources), которая будет работать как хранилище всех доступных источников со столбцами source_id и source_table.Оба включаются в первичный ключ.
- Я бы создал внешние ключи из каждой таблицы «исходников», ссылающейся на таблицу AllSources, чтобы в них могли быть только зарегистрированные источники.
- Затем я бы создалтаблица, которую вы упомянули в своем вопросе с внешним ключом, ссылающимся на таблицу AllSources (не отдельные таблицы «источника»).
Недостаток: вам придется совместно управлять AllSources и «исходными» таблицами, гарантируя, что при создании записи в AllSources вы также создадите соответствующую запись в соответствующей «исходной» таблице, которая на самом делене так сложно.