Вопрос проектирования загрузки базы данных - PullRequest
1 голос
/ 11 декабря 2008

Мне нужна помощь в дизайне.

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

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

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

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

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

    ПРОФИ: это просто, просто и легко автоматизировано.
    CONS: в базе данных хранится много избыточных данных, излишне, особенно если электронная таблица изменяется много раз.

  2. Выполните сравнение с таблицами и загрузите только те строки, которые были изменены.

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

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

    ПРОФИ: Это автоматизировано.
    ПРОТИВ: Потребуется время, чтобы написать и протестировать такой процесс, и мне будет очень трудно оправдать время, потраченное на это.

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

1 Ответ

1 голос
/ 11 декабря 2008

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...