Вы можете найти инструмент ETL (Extract-Transform-Load), который сделает вашу жизнь проще, чем пытаться решить вашу проблему в коде .:
Они разработаны специально для описанного вами типа загрузки данных.
EDIT
Хотя я по-прежнему утверждаю, что инструмент ETL лучше всего удовлетворит ваши потребности, если вы настаиваете на том, чтобы делать это в коде, вам следует подумать о внедрении ETL как шаблона. Причина этого заключается в том, что ETL является хорошо зарекомендовавшей себя практикой для загрузки данных из различных источников. Вам нужно некоторое время, чтобы изучить, как реализован ETL.
На базовом уровне у вас должно быть три слоя: слой извлечения, слой преобразования и слой загрузки.
Слой extract должен отвечать за получение данных из источника. Не следует беспокоиться о форме данных на этом этапе. Чтобы сохранить уровень чистым, вы должны реализовывать только тот код, который «получает» данные здесь. Беспокойство о формировании его в слое трансформации.
Слой преобразование должен отвечать за сбор данных, извлеченных из различных источников, и преобразование их в форму назначения. Инструменты ETL делают это очень эффективно, обрабатывая данные как конвейеры. Они могут быть разделены и распараллелены. У вас, вероятно, не будет времени или ресурсов для этого. Альтернативой может быть загрузка данных в промежуточные таблицы (менее нормализованное представление данных).
Слой load берет преобразованные данные (в приведенном выше случае из промежуточных таблиц) и загружает их в конечное местоположение назначения.
Это в достаточной степени разделяет ваши слои, чтобы вы могли защитить себя от будущих изменений. Имейте в виду, однако, что вы действительно просто делаете то, что инструмент ETL сделает для вас из коробки.