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