2008-12-11 6 views
1

Я ищу здесь некоторую помощь по дизайну.Вопросы по загрузке данных с базами данных

Я работаю для клиента, который требует от меня хранить данные о своих десятках тысяч сотрудников. Данные даются мне в электронных таблицах Excel, по одному для каждого города/страны, в которой у них есть офисы.

У меня есть база данных, которая содержит таблицу электронных таблиц и таблицу данных. В таблице данных есть столбец spreadsheet_id, который связывает его с таблицей электронных таблиц, чтобы я знал, какая таблица из каждой строки данных. У меня также есть простой сценарий оболочки, который загружает данные в базу данных.

Пока все хорошо. Тем не менее, некоторые данные отсутствуют в исходных таблицах, и вместо того, чтобы давать мне только недостающие данные, клиент предоставляет мне модифицированную версию исходной электронной таблицы с добавленными к ней новыми данными. Я не могу просто перезаписать исходные данные, поскольку данные уже были использованы, и есть другие таблицы, которые ссылаются на него.

Вопрос в том, как я могу справиться с этим? Мне кажется, что у меня есть следующие варианты:

  1. Загрузите всю измененную таблицу, и маркирует оригинал «неактивные».

    PROS: Это просто, просто и легко автоматизировано.
    СООТВЕТСТВУЕТ: много избыточных данных хранится в базе данных без необходимости, особенно если таблица неоднократно изменяется.

  2. Сделайте разницу в электронных таблицах и загрузите только те строки, которые были изменены.

    PROS: Меньше данных загружается в базу данных.
    CONS: Это, по крайней мере, частично ручное и, следовательно, подвержено ошибкам. Это также означает, что база данных больше не будет рассказывать всю историю - например, если некоторые данные отсутствуют в какой-то более поздний срок, я не могу утверждать, что я никогда не получал данные, просто запросив базу данных. И будет ли выполнение различий продолжением работы, даже если мне придется делать это несколько раз?

  3. Напишите процесс, который сравнивает каждую строку таблицы с тем, что находится в базе данных, вставляет строки, которые изменили данные, и устанавливает исходную строку данных в неактивную. (Я также должен отслеживать исходные данные, поэтому я не могу перезаписать его.)

    PROS: Это автоматизировано.
    CONS: На это потребуется время, чтобы написать и протестировать такой процесс, и мне будет очень сложно оправдать потраченное время.

Я надеюсь найти четвертое и лучшее решение. Любые идеи относительно того, что это может быть?

ответ

1

Если у вас нет способа быть на 100% уверенным, вы можете избежать человеческой ошибки в варианте 2, не делайте этого.

Вариант 3: Не должно быть слишком сложным (или трудоемким) для написания сценария VBA, который выполняет сравнение для вас. VBA не быстро, но вы можете позволить ему работать на ночь. Не требуется более одного-двух часов, чтобы избежать ошибок.

Вариант 1: Это был бы мой предпочтительный подход: быстрый, простой, и я не могу думать ни о чем, что может пойти не так прямо сейчас. (Ну, сначала вы должны отметить оригинал как «неактивный», а затем загрузить новый набор данных IMO).Особенно, если это может произойти чаще в будущем, важно иметь стабильный и быстрый процесс борьбы с ним.

Если вас действительно беспокоят все неактивные записи, вы также можете удалить их после обновления (delete from spreadsheets where status='inactive' или somesuch). Но до сих пор у всех баз данных, которые я видел в своей работе, было много. Я бы не стал слишком беспокоиться об этом.

Смежные вопросы