Я ищу здесь некоторую помощь по дизайну.Вопросы по загрузке данных с базами данных
Я работаю для клиента, который требует от меня хранить данные о своих десятках тысяч сотрудников. Данные даются мне в электронных таблицах Excel, по одному для каждого города/страны, в которой у них есть офисы.
У меня есть база данных, которая содержит таблицу электронных таблиц и таблицу данных. В таблице данных есть столбец spreadsheet_id, который связывает его с таблицей электронных таблиц, чтобы я знал, какая таблица из каждой строки данных. У меня также есть простой сценарий оболочки, который загружает данные в базу данных.
Пока все хорошо. Тем не менее, некоторые данные отсутствуют в исходных таблицах, и вместо того, чтобы давать мне только недостающие данные, клиент предоставляет мне модифицированную версию исходной электронной таблицы с добавленными к ней новыми данными. Я не могу просто перезаписать исходные данные, поскольку данные уже были использованы, и есть другие таблицы, которые ссылаются на него.
Вопрос в том, как я могу справиться с этим? Мне кажется, что у меня есть следующие варианты:
Загрузите всю измененную таблицу, и маркирует оригинал «неактивные».
PROS: Это просто, просто и легко автоматизировано.
СООТВЕТСТВУЕТ: много избыточных данных хранится в базе данных без необходимости, особенно если таблица неоднократно изменяется.Сделайте разницу в электронных таблицах и загрузите только те строки, которые были изменены.
PROS: Меньше данных загружается в базу данных.
CONS: Это, по крайней мере, частично ручное и, следовательно, подвержено ошибкам. Это также означает, что база данных больше не будет рассказывать всю историю - например, если некоторые данные отсутствуют в какой-то более поздний срок, я не могу утверждать, что я никогда не получал данные, просто запросив базу данных. И будет ли выполнение различий продолжением работы, даже если мне придется делать это несколько раз?Напишите процесс, который сравнивает каждую строку таблицы с тем, что находится в базе данных, вставляет строки, которые изменили данные, и устанавливает исходную строку данных в неактивную. (Я также должен отслеживать исходные данные, поэтому я не могу перезаписать его.)
PROS: Это автоматизировано.
CONS: На это потребуется время, чтобы написать и протестировать такой процесс, и мне будет очень сложно оправдать потраченное время.
Я надеюсь найти четвертое и лучшее решение. Любые идеи относительно того, что это может быть?