2012-01-05 3 views
0

Мне нужно сравнить данные из двух разных источников.Объединение данных из разных источников в базу данных

Из другого источника мне нужно получить college_id, student_id, student_name & Я хочу проверить, обновлены ли они в моей базе данных. Источник всегда имеет точные данные.

В одном колледже может быть несколько записей.

При каждом входе в систему мне необходимо обновить эту информацию в моей базе данных. Как я могу продолжить?

Удалить & Вставить вариант не рекомендуется нашей командой. Итак, как мне сравнивать?

Можно ли предоставить какой-нибудь эффективный псевдокод? Должен ли я хранить исходную информацию в двухмерном массиве на Java или в списке или как?

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

Если запись существует в источнике & не существует в db, мне нужно вставить ее в db.

Оцените, может ли кто-нибудь дать представление о том, следует ли использовать список или 2-мерный массив с некоторым псевдокодом.

Спасибо!

+0

Как это вопрос 'java'? Звучит отлично 'update XXX set student_name =? где college_id =? и student_id =? 'для меня. – alf

+0

Мне нужна логика сравнения от исходных данных к данным, которые у меня есть в db .... Должен ли я хранить исходные данные в 2D-массиве, а затем сравнивать его через цикл с базой данных или как ??? – Mike

+0

@alf - Но канонический источник, возможно, удалил свою запись, поэтому вы тоже должны это учитывать. Это немного сложнее. – cdeszaq

ответ

0

В принципе, вам нужно

  1. нагрузок всех записи из базы данных
  2. нагрузок всех записей из доверенного источника
  3. Найти все записи в БД, которые больше не находятся в надежном источнике. Удалите их.
  4. Найти все записи в надежном источнике, которые не находятся в БД. Добавьте их.
  5. Найти все записи изменений. Обновите их.

Проблема, вы не указали первичного ключа для записей-так # 5 может быть неуместным.

Для всех остальных, вам нужен класс, который инкапсулирует запись, реализует equals() и hashCode() методы (должным образом!), И несколько сборников, со знанием removeAll() и retainAll() методов.

Надеюсь, что это поможет.

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

+0

В этом случае идентификатор колледжа будет уникальным, поэтому вы можете предоставить пример кода с комментариями pseduo? – Mike

+0

Если 'college_id' уникален (что странно, так как это означает, что у вас есть только один ученик в колледже), создайте« Map 'from' college_id' для пары id-name студента, прочитайте экземпляр один из обоих БД и канонический источник, и выполните следующие действия: «Карта <Целое, Студент> toDelete = новый HashMap (dataFromDB); . ToDelete.keySet() RemoveAll (dataFromCanonicalSource.keySet()); Карта toAdd = new HashMap (dataFromCanonicalSource); toAdd.keySet(). removeAll (dataFromDB.keySet()); ' – alf

+0

В одном колледже может быть несколько учеников. student_id также всегда уникален. В принципе, мне нужно взять student_id из источника и сравнить его в пункте назначения. Для простоты предположим, что мне нужно получить student_id, имя, адрес из источника и сохранить их в актуальном состоянии в базе данных. Можете ли вы предоставить пример кода сейчас? – Mike

0

Вы изложили большинство шагов в своем вопросе. Просто пройти, и всякий раз, когда вы синхронизируете:

  1. захватить вас данные из базы данных
  2. Сравните с данными из канонического источника
  3. На основе сравнения данных, принять соответствующий действие в базе данных:
    • Вставьте новую запись, если вы не один
    • Update ваши записи, если данные обновляются
    • Обновление метки на запись, так что вы знаете когда вы обновили
  4. Последний шаг, удалить все записи из базы данных, которые не были обновлены «в последнее время» на основе меток времени
+0

Я планировал разместить исходные данные в 2D-массиве, а затем сортировать этот массив на collegeId. Теперь, возьмите данные из базы данных, поместите их в другой 2D-массив & sort, который также основан на CollegeId. Тогда было бы легко сравнить 2 массива. Является ли этот подход более эффективным и эффективным в Java? – Mike

+0

@Mike нет, это ни лучше, ни эффективно – alf

+0

@alf, можете ли вы привести пример? – Mike